我已经浏览了一些如何在TextView
使用Spannable
类中突出显示某些文本的解决方案。但它只允许突出显示由字符组成的片段。如果我想突出显示包含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);
}
}
你可以android:padding="5dp"
在你的 xml 布局文件中做,你可以通过 style xml 和 Spannable String 突出显示 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);
这可能会帮助你
将以下代码保存在可绘制文件夹中
<?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>>"
您尝试做的事情可以使用StateListDrawable
.
在触摸模式下让您的所有TextView
's 聚焦。为 textview 的背景颜色和文本颜色定义 statelistdrawables,并requestFocus()
在您想要突出显示 textview 时调用。
StateListDrawable 用于 textview 的背景:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_focused="true"
android:drawable="#0F0" />
<item android:drawable="#0000" />
</selector>
同样为文本颜色定义一个选择器列表。