你无法直接指定 Html.fromHtml()
的跨度优先级。相反,你可以从 Html.fromHtml()
返回的 Spanned
中调用 Spanned.getSpans()
方法来获取跨度对象。你可以使用 Spannable.setSpan()
方法将跨度复制到新的 Spannable
中,例如 SpannableStringBuilder
。
这是一个演示如何使用 Spanned.SPAN_PRIORITY_SHIFT
在其他跨度之前或之后应用一个跨度的示例。
TextView textView;
SpannableStringBuilder ssb;
final ForegroundColorSpan BLUE = new ForegroundColorSpan(Color.BLUE);
final ForegroundColorSpan RED = new ForegroundColorSpan(Color.RED);
textView = findViewById(R.id.text1);
ssb = new SpannableStringBuilder("Hello world!");
ssb.setSpan(BLUE, 0, 5, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
ssb.setSpan(RED, 0, 12, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(ssb);
textView = findViewById(R.id.text2);
ssb = new SpannableStringBuilder("Hello world!");
ssb.setSpan(RED, 0, 12, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
ssb.setSpan(BLUE, 0, 5, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(ssb);
textView = findViewById(R.id.text3);
ssb = new SpannableStringBuilder("Hello world!");
ssb.setSpan(BLUE, 0, 5, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE | (0x01 << Spanned.SPAN_PRIORITY_SHIFT));
ssb.setSpan(RED, 0, 12, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE | (0x00 << Spanned.SPAN_PRIORITY_SHIFT));
textView.setText(ssb);
textView = findViewById(R.id.text4);
ssb = new SpannableStringBuilder("Hello world!");
ssb.setSpan(BLUE, 0, 5, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE | (0x00 << Spanned.SPAN_PRIORITY_SHIFT));
ssb.setSpan(RED, 0, 12, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE | (0x01 << Spanned.SPAN_PRIORITY_SHIFT));
textView.setText(ssb);