如何在SpannableString Android中设置不透明度/ alpha

时间:2018-03-28 14:34:44

标签: c# android .net xamarin

如何在Android中使用SpannableStringBuilder为跨区文本实际设置alpha / opacity?我想在一个TextView中实现这个设计:

enter image description here

主要文字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 /不透明度。

1 个答案:

答案 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);