Android TextView:如何在TextView中设置整行的背景颜色

时间:2013-01-11 16:11:02

标签: android textview background-color

我想在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背景。

知道如何实现这一目标吗?

4 个答案:

答案 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);