Ole*_*ger 13 user-interface android
如何使用Android TextView实现这样的效果.它看起来像选择的文本,我在API中找不到类似的东西.
这不是视图的背景颜色,而是仅适用于文本的背景颜色.你可以看到它在换行符时是如何停止的,文本行之间有一条细白线.

Tyl*_*ell 15
<TextView
android:background="#0000FF"
android:textColor="#FFFFFF" />
Run Code Online (Sandbox Code Playgroud)
将定义一个TextView蓝色背景和白色文本......这是你需要的吗?
据我所知,如果不重写 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);
Run Code Online (Sandbox Code Playgroud)
NewSpannableClass自定义跨度在哪里。
看到很多人懒得查找如何制作自定义跨度,这里有一个例子
public class CustomSpannable extends ClickableSpan
{
@Override public void updateDrawState(TextPaint ds)
{
super.updateDrawState(ds);
ds.setUnderlineText(true);
}
}
Run Code Online (Sandbox Code Playgroud)
此示例将为文本添加下划线。用于TextPaint更改跨区文本的外观。
小智 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;
}
Run Code Online (Sandbox Code Playgroud)
其中“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);
Run Code Online (Sandbox Code Playgroud)
我想这应该足够了。
谢谢
| 归档时间: |
|
| 查看次数: |
36827 次 |
| 最近记录: |