如何在Android中使用SpannableStringBuilder
为跨区文本实际设置alpha / opacity?我想在一个TextView
中实现这个设计:
主要文字Current location
具有完全不透明度/ alpha(1.0),而子文字Kungstan 43
的不透明度为84%。
我已将SpannableStringBuilder
设置如下:
SpannableStringBuilder OriginText = new SpannableStringBuilder();
OriginText.Append(OriginMainText + ", ");
int SubTextIndex = OriginText.Length();
OriginText.Append(OriginSubText);
OriginText.SetSpan(<what need to set here??>, SubTextIndex, OriginText.Length(), 0)
我应该在<what need to set here??>
中添加什么对象?最接近的方法是设置前景色,但我更喜欢它是否有办法设置alpha /不透明度。
答案 0 :(得分:0)
您可以使用TextAppearanceSpan
。
OriginText.setSpan(new TextAppearanceSpan(...), SubTextIndex, OriginText.Length(), 0);
语法为:
TextAppearanceSpan(String family,
int style,
int size,
ColorStateList color,
ColorStateList linkColor)
这里的重要参数是ColorStateList color
,其定义如下:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true"
android:color="@color/sample_focused" />
<item android:state_pressed="true"
android:state_enabled="false"
android:color="@color/sample_disabled_pressed" />
<item android:state_enabled="false"
android:color="@color/sample_disabled_not_pressed" />
<item android:color="@color/sample_default" />
</selector>
从API 23开始,项目可以选择定义android:alpha
属性来修改基色的不透明度,这就是您想要的。例如,以下项目具有84%的不透明度:
<item android:state_enabled="false"
android:color="?android:attr/colorAccent"
android:alpha="0.84" />
要从资源获取颜色定义,您可以使用:
ContextCompat.getColor(context, R.color.your_color);