我已经查看过如何使用TextView
类突出Spannable
中某些文字的一些解决方案。但它只允许突出显示由字符组成的片段。如果我想突出显示包含TextView
宽度的文本行,但此行中的文本不会填满整个视图的宽度,该怎么办?
如果有人在这种情况下有经验,我很乐意接受建议。
好的,我希望以下图片可以明确我的目标。
这是我可以使用Spannable
:
这就是我想要的:
我真的希望这很清楚。
答案 0 :(得分:8)
可能有一种更简单的方法可以执行此操作,但我相信您需要实现一个实现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);
}
}
答案 1 :(得分:1)
使用StateListDrawable
可以更轻松地完成您要做的工作。
让所有TextView
都可以在触控模式下进行对焦。为textview的背景颜色和文本颜色定义statelistdrawable,并在想要突出显示文本视图时调用requestFocus()
。
textview的背景StateListDrawable:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_focused="true"
android:drawable="#0F0" />
<item android:drawable="#0000" />
</selector>
类似地定义文本颜色的选择器列表。
答案 2 :(得分:0)
您可以在xml布局文件中执行android:padding="5dp"
,并且可以通过样式xml和Spannablestring正常突出显示希望它将起作用欢迎
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);
这可能对您有所帮助
答案 3 :(得分:0)
将以下代码保存在可绘制文件夹
中<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="<<your color code"/>
</shape>
并指定textview背景,如下所示
android:background="@drawable/<<your file name>>"