4

我想在 TextView 中设置整行的背景颜色,而不一定是文本覆盖的那部分行(我可以使用 Span 来完成)。

例如,如果说第 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

4 回答 4

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);
    }
}
于 2013-01-11T16:33:46.730 回答
0

您的目标是使用具有垂直方向的 LineaLayout 之类的东西
,它将 TextView 作为“可着色线”。

1) 创建一个扩展 LinearLayout 的类。
2) 编写基本函数以添加“可着色线”、“绘制它”等
3) 在布局 XML 中使用您的视图。

于 2013-01-11T16:44:19.283 回答
0
    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);
于 2013-01-11T18:53:46.323 回答
-1

TextView(就像所有其他 android View 一样)具有setBackgroundColor方法

t.setBackgroundColor(0xffffffff);
于 2013-01-11T16:21:26.307 回答