Android TextView文本背景颜色

Ole*_*ger 13 user-interface android

如何使用Android TextView实现这样的效果.它看起来像选择的文本,我在API中找不到类似的东西.

这不是视图的背景颜色,而是仅适用于文本的背景颜色.你可以看到它在换行符时是如何停止的,文本行之间有一条细白线.

截图

Tyl*_*ell 15

<TextView
android:background="#0000FF"
android:textColor="#FFFFFF" />
Run Code Online (Sandbox Code Playgroud)

将定义一个TextView蓝色背景和白色文本......这是你需要的吗?


Scr*_*Fox 5

据我所知,如果不重写 TextView 并在包含间隙颜色的视图上绘制自定义绘画,就没有“好的”方法可以做到这一点。

即使设置该lineSpacingExtra属性也只会扩展背景颜色。

您还可以考虑创建自定义spannable并像这样使用它

Spannable str = new SpannableStringBuilder("How can I achieve such an effect with an Android TextView. It looks somehow like selected text and I couldn't find something similar in the API.");
str.setSpan(new NewSpannableClass(), 0, str.length() - 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
((TextView)findViewById(R.id.text)).setText(str);
Run Code Online (Sandbox Code Playgroud)

NewSpannableClass自定义跨度在哪里。

看到很多人懒得查找如何制作自定义跨度,这里有一个例子

public class CustomSpannable extends ClickableSpan
{
    @Override public void updateDrawState(TextPaint ds)
    {
        super.updateDrawState(ds);
        ds.setUnderlineText(true);
    }
}
Run Code Online (Sandbox Code Playgroud)

此示例将为文本添加下划线。用于TextPaint更改跨区文本的外观。

  • 我想看看完整的代码,谢谢。答案被接受,但我没有得到“NewSpannableClass” (2认同)

小智 5

我相信有一种更简单、更好的方法来实现这一点:只需创建一个 backgroundColorSpan 并将其添加到 SpannableString 中。沿着这些思路:

public static SpannableString buildBackgroundColorSpan(SpannableString spannableString,
                                                String text, String searchString, int color) {

    int indexOf = text.toUpperCase().indexOf(searchString.toUpperCase());

    try {
        spannableString.setSpan(new BackgroundColorSpan(color), indexOf,
                (indexOf + searchString.length()), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    } catch (Exception e) {

    }


    return spannableString;
}
Run Code Online (Sandbox Code Playgroud)

其中“spannableString”是创建的 SpannableString 对象,并假定用“text”初始化;“searchString”表示您希望在 TextView 中“突出显示”的文本片段,“color”表示“突出显示”文本应设置的背景颜色。

String text = "The Quick Brown Fox Jumps over the Lazy Dog";
String searchString = "brown";
int color = Color.parseColor("#FFF5F19E");

SpannableString spannableString = new SpannableString(text);
spannableString = StringUtils.buildBackgroundColorSpan(spannableString, text, searchString, color);
Run Code Online (Sandbox Code Playgroud)

我想这应该足够了。

谢谢