繁体   English   中英

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

[英]How to set opacity/alpha in SpannableString Android

如何在 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/opacity。

您可以使用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 开始,items 可以选择定义一个android:alpha属性来修改基色的不透明度,这是你想要的。 例如,以下项目具有您想要的 84% 不透明度:

<item android:state_enabled="false"
      android:color="?android:attr/colorAccent"
      android:alpha="0.84" />

要从资源中获取颜色定义,您可以使用:

ContextCompat.getColor(context, R.color.your_color);

更改不透明度的一种简单方法是将代表不透明度的 2 位数字连接到代表颜色的 6 位数字,例如,如果颜色为 0xFFFFFF,则具有半不透明度 (0x80) 的相同颜色将为 0x80FFFFFF。 然后使用 setSpan 将颜色应用到文本的一部分,如下所示:

spannable.setSpan(new ForegroundColorSpan(color), ...) 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM