仅为TextView的一部分设置背景

时间:2016-05-31 11:39:15

标签: android textview spannable

例如,我有一个textview(多行):aaaaaaaaabbbbaaa。我想只为'bbb'字符设置背景。我尝试使用Spannable,但它不适用于我的背景是来自drawable的图像。 非常感谢。

2 个答案:

答案 0 :(得分:1)

enter image description here

使用BackgroundColorSpan你可以做到这一点,但中文并没有正确运作。

 private void replaceText(TextView text, String str, int color) {
    Spannable raw = new SpannableString(text.getText());
    BackgroundColorSpan[] spans = raw.getSpans(0,raw.length(),BackgroundColorSpan.class);

    for (BackgroundColorSpan span : spans) {
        raw.removeSpan(span);
    }
    int index = TextUtils.indexOf(raw, str);
    while (index >= 0) {
        raw.setSpan(new BackgroundColorSpan(color), index, index + str.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        index = TextUtils.indexOf(raw, str, index + str.length());
    }
    text.setText(raw);
}

答案 1 :(得分:0)

private fun highlightTextPart(
    textView: TextView,
    mainString: String,
    subString: String
) {


    if (mainString.contains(subString)) {
        val startIndex = mainString.indexOf(subString)
        val endIndex = startIndex + subString.length
        val spannableString = SpannableString(mainString)
        spannableString.setSpan(
            BackgroundColorSpan(Color.parseColor("#ff00ff")),
            startIndex,
            endIndex,
            Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
        )
        textView.text = spannableString
    }
}

使用

    highlightTextPart("text text sell text", textView, "sell");