14

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

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

截屏

4

9 回答 9

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

会定义一个TextView蓝色背景和白色文本...是你需要的吗?

于 2013-03-23T03:12:41.210 回答
4

据我所见,如果不覆盖 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自定义跨度在哪里。

看到很多人都懒得去查找如何制作自定义 spannables,这里有一个例子

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

此示例将在文本下划线。用于TextPaint更改跨区文本的外观。

于 2013-03-23T11:06:51.327 回答
4

我相信有一种更简单、更好的方法来实现这一点:只需创建一个 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”是创建并假定用“text”初始化的 SpannableString 对象;“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);

我认为这应该足够了。

谢谢

于 2015-05-27T09:08:12.433 回答
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"/>

如果您想从活动代码中执行此操作,您可以动态更改它,例如尝试:

text.setBackgroundColor( int color);
于 2014-04-18T12:13:07.073 回答
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

于 2013-03-23T04:18:04.773 回答
0

textview在in.xml文件下面试试这个:

<TextView android:background="#0000FF">
于 2013-03-23T11:20:45.050 回答
0

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

于 2015-09-13T17:07:03.987 回答
-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>
于 2013-10-02T05:58:08.310 回答
-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"/>
于 2013-03-23T05:09:41.877 回答