突出显示TextView中的文本行,包括所有宽度

我已经查看了一些如何使用Spannable类在TextView突出显示某些文本的解决方案。 但它只允许突出显示由字符组成的片段。 如果我想突出显示包含TextView宽度的文本行,但是此行中的文本不能填充整个视图的宽度,该怎么办?

如果有人在这种情况下有经验,我很乐意接受建议。

更新:

好的,我希望以下图片可以清晰地表达我的目标。

这是我可以使用Spannable实现的:

在此处输入图像描述

这就是我想要的:

在此处输入图像描述

我真的希望它很清楚。

可能有一种更简单的方法可以做到这一点,但我相信你需要实现一个实现LineBackgroundSpan的类来做你想要的。 这是一些示例代码:

 public class MyActivity extends Activity { private static class MySpan implements LineBackgroundSpan { private final int color; public MySpan(int color) { this.color = color; } @Override public void drawBackground(Canvas c, Paint p, int left, int right, int top, int baseline, int bottom, CharSequence text, int start, int end, int lnum) { final int paintColor = p.getColor(); p.setColor(color); c.drawRect(new Rect(left, top, right, bottom), p); p.setColor(paintColor); } } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); final TextView tv = new TextView(this); setContentView(tv); tv.setText("Lines:\n", BufferType.EDITABLE); appendLine(tv.getEditableText(), "123456 123 12345678\n", Color.BLACK); appendLine(tv.getEditableText(), "123456 123 12345678\n", Color.RED); appendLine(tv.getEditableText(), "123456 123 12345678\n", Color.BLACK); } private void appendLine(Editable text, String string, int color) { final int start = text.length(); text.append(string); final int end = text.length(); text.setSpan(new MySpan(color), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } } 

使用StateListDrawable可以更轻松地完成您尝试做的事情。

使所有TextView在触摸模式下都可以集中精力。 为textview的背景颜色和文本颜色定义statelistdrawable,并在想要突出显示textview时调用requestFocus()

textview的背景的StateListDrawable:

     

类似地定义文本颜色的选择器列表。

你可以在你的xml布局文件中做android:padding="5dp" ,你可以通过样式xml和Spannable字符串突出显示noramlly希望它会工作欢迎

 TextView TV = (TextView)findViewById(R.id.text); TV.setText("Italic, highlighted, bold.", TextView.BufferType.SPANNABLE); Spannable WordtoSpan = (Spannable) TV.getText(); WordtoSpan.setSpan(new BackgroundColorSpan(0xFFFFFF00), 8, 19, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); TV.setText(WordtoSpan); 

链接1

这可能对你有所帮助

将以下代码保存在drawable文件夹中

     

并指定textview背景如下

 android:background="@drawable/<>"