我想在TextView中设置整行的背景颜色,而不一定是文本所覆盖的部分(我可以使用Span执行)。
E.g。如果说第0行,可以容纳25个字符,但只有12个字符。如果我说
SpannableString s = new SpannableString("abcdefghijkl");
s.setSpan(new BackgroundColorSpan(0xffffffff), 0, 11, Spanned.SPAN_INCLUSIVE_INCLUSIVE);
TextView t = new TextView();
t.setText(s);
这会将背景颜色设置为一半。 但我想要用背景颜色填充整行(TextView的整个宽度)。此外,我希望这只发生在一行,而不是整个TextView背景。
知道如何实现这一目标吗?
答案 0 :(得分:1)
TextView name = (TextView) findViewById(R.id.name);
String iName = "YOYOYOYO";
ForegroundColorSpan fcs = new ForegroundColorSpan(Color.rgb(184, 184,
184));
SpannableString ssb = new SpannableString(iName);
ssb.setSpan(fcs, 0, iName.length(),
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
name.setText(ssb);
答案 1 :(得分:0)
将TextView包装在RelativeLayout中,并在其后面添加另一个视图:
<RelativeLayout
android:id="@+id/container"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
<View android:id="@+id/bgcolor"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:background="@color/whatever"
/>
<TextView android:id="@+id/textview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
</RelativeLayout>
现在,在全局布局上,找到TextView线条的高度,并将bgcolor视图设置为该高度:
final TextView textView = (TextView) findViewById(R.id.textview);
final ViewTreeObserver vto = textView.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
public void onGlobalLayout() {
int lineHeight = textView.getLineHeight();
// May need to also getLineSpacingExtra, etc. not sure.
View bgColor = findViewById(R.id.bgcolor);
RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams)
bgColor.getLayoutParams();
lp.height = lineHeight;
bgColor.setLayoutParams(lp);
// May or may not want to remove the listener:
vto.removeGlobalOnLayoutListener(this);
}
}
答案 2 :(得分:0)
你的目标是使用像LineaLayout这样的垂直方向,
将TextView作为“可着色线”。
1)创建一个扩展LinearLayout的类
2)编写基本功能,添加“colorable line”,“paint it”&amp; e.t.c.
3)在布局XML中使用您的视图。
答案 3 :(得分:-1)
TextView(就像其他所有Android视图一样)都有方法setBackgroundColor
t.setBackgroundColor(0xffffffff);