安卓TextView文本背景色

14

如何在Android TextView上实现这样的效果。它看起来有点像选定的文本,但我在API中找不到类似的东西。

这不是视图的背景颜色,而是仅用于文本的背景颜色。您可以看到它在换行处停止,并且在文本行之间有一条细白线。

屏幕截图


嗨,Ole,你解决了这个问题吗?我也需要相同的行为。 - alfdev
可能是具有背景颜色和行间距的TextView的重复问题。 - Evren Ozturk
9个回答

17
<TextView
android:background="#0000FF"
android:textColor="#FFFFFF" />

您想定义一个背景为蓝色、文字为白色的 TextView ...这符合您的需要吗?


5

我相信实现这个的方法更简单、更易于理解:只需要创建一个backgroundColorSpan并将其添加到SpannableString中即可,具体步骤如下:

public static SpannableString buildBackgroundColorSpan(SpannableString spannableString,
                                                String text, String searchString, int color) {

    int indexOf = text.toUpperCase().indexOf(searchString.toUpperCase());

    try {
        spannableString.setSpan(new BackgroundColorSpan(color), indexOf,
                (indexOf + searchString.length()), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    } catch (Exception e) {

    }


    return spannableString;
}

"spannableString"是一个SpannableString对象,假设已经用"text"初始化;"searchString"表示您希望在TextView中“高亮”显示的文本片段,而“color”则是“高亮”文本应设置的背景颜色。

String text = "The Quick Brown Fox Jumps over the Lazy Dog";
String searchString = "brown";
int color = Color.parseColor("#FFF5F19E");

SpannableString spannableString = new SpannableString(text);
spannableString = StringUtils.buildBackgroundColorSpan(spannableString, text, searchString, color);

我认为这应该足够了。
谢谢。

它能工作,但是我使用这个: int color = argb(120, 0, 0, 0); (例如制作透明黑色),而不是这个: int color = Color.parseColor("#FFF5F19E"); 当我尝试使用类似“#FFF5F19E”的颜色格式时,颜色就会出错。 - Maxim

5
据我所知,如果不重写TextView并在视图上绘制自定义画笔(包括间隙颜色),就没有“好”的方法来完成此操作。
即使设置lineSpacingExtra属性也只会扩展背景颜色。
您还可以考虑创建自定义spannable,并像这样使用它。
Spannable str = new SpannableStringBuilder("How can I achieve such an effect with an Android TextView. It looks somehow like selected text and I couldn't find something similar in the API.");
str.setSpan(new NewSpannableClass(), 0, str.length() - 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
((TextView)findViewById(R.id.text)).setText(str);

这里是一个示例,NewSpannableClass 是自定义的Spannable。

考虑到很多人懒得查找如何创建自定义Spannable,以下是一个示例。

public class CustomSpannable extends ClickableSpan
{
    @Override public void updateDrawState(TextPaint ds)
    {
        super.updateDrawState(ds);
        ds.setUnderlineText(true);
    }
}

这个例子会给文字加下划线。使用TextPaint改变跨度文本的外观。

是的,你说得对。lineSpacingExtra属性只会扩展背景颜色。有人有解决方案吗? - NaiveBz
2
我想看完整的代码,请。 答案已被接受,但我不理解“NewSpannableClass”。 - Bobbelinio
1
我很想看到完整的代码呢。 - eoinzy
嗨,我使用了相同的代码,但是它没有给我相同的结果。 - Reshma
对于背景颜色,我在updateDrawState中添加了以下代码: ds.bgColor = argb(120, 0, 0, 0); 请注意,当我使用类似于“#FFF5F19E”这样的颜色格式时,颜色会出现错误。 - Maxim

1
如果您想从XML中执行此操作,请尝试其他人提供的解决方案,例如:
 <TextView
            android:id="@+id/TextView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:textColor="#ffffff"
            android:background="#1bgtbgt"/>

如果你想从Activity Code中进行更改,可以尝试动态更改,例如:

尝试:

text.setBackgroundColor( int color);

1
使用这个例子。
 <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="#0000FF"
    android:textColor="#FFFFFF" />

选取颜色,请使用以下链接 http://html-color-codes.info/

红色:#750A0A

蓝色:#002BFF

绿色:#33FF00

白色:#FFFFFF

黑色:#000000


0
只需将 TextView 的长度设置为 match_parent,假设它嵌套在一个跨越整个屏幕长度的父级值中,您的文本将具有相同的长度,但框将增加到整个屏幕的长度。

0

.xml文件中的textview下面尝试以下代码:

<TextView android:background="#0000FF">

-1
你可以在TextView周围添加另一个布局,并将其背景设置为所需的颜色。
<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="#000000" >

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:textColor="#FFFFFF"
        android:text="@string/text" />

</LinearLayout>

-1

尝试使用此代码设置文本背景颜色

 <TextView
            android:id="@+id/comment_dis"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="Stack Overflow
            android:textColor="#ffffff"
            android:background="#3cabdc"/>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接