【问题标题】:How to set alpha in a xml selector如何在 xml 选择器中设置 alpha
【发布时间】:2018-03-18 03:49:59
【问题描述】:

我想在未启用时使用选择器将图标变灰。似乎这样的事情应该可以工作(白色背景):

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="false" >
      android:alpha="0.5"
    </item>

    <item android:state_enabled="true" >
      android:alpha="1"
    </item>
</selector>

但它会在运行时导致 java.lang.NumberFormatException。我也试过“0.5f”。同样的错误。

这类似于Is there a way to set drawable's Alpha using XML?,但我专门询问的是 NumberFormatException。顺便说一句,我也尝试使用 0 到 255 之间的整数值。我得到了同样的错误。

【问题讨论】:

标签: android selector


【解决方案1】:

考虑到这是您的颜色选择器,它位于 res/color/my_selector.xml 下

注意:这适用于 Android 23 及更高版本的设备

您可以在此颜色选择器中使用 alpha 作为

<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:color="@color/my_color" android:state_enabled="true" />
  <item android:alpha="@dimen/my_float_value" android:color="@color/my_color" />
</selector>

要使用这个 -

<Button
      android:id="@+id/button1"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="@string/button_label"
      android:background="@color/my_selector" />

请参阅以下链接以获取更多参考: https://developer.android.com/reference/android/content/res/ColorStateList.html

【讨论】:

    【解决方案2】:

    你不能在一个项目中那样做 android:alpha 。您可以在 item 中放置一个 shape 之类的东西,或者您可以在 item 中使用 drawable 来实现相同的效果。

    “灰色”是什么意思?您所展示的内容并没有真正变灰,而是使某些东西部分不透明。如果该项目最初是红色的并且您将 alpha 更改为 0.5,它仍将是红色阴影。但是假设我们从灰色开始,在本例中为 F5F5F5(材料灰色 100),那么您可以这样做:

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
    
        <item android:state_enabled="true"  android:drawable="#FFF5F5F5" />
        <item android:state_enabled="false" android:drawable="#80F5F5F5" />
    
    </selector>
    

    请注意“80”处于虚假状态,给出不同的不透明度。下面是一个类似的例子,但在项目内部有矩形形状:

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
    
        <item android:state_enabled="true">
            <shape android:shape="rectangle">
                <solid android:color="#FFF5F5F5" />
            </shape>
        </item>
        <item android:state_enabled="false">
            <shape android:shape="rectangle">
                <solid android:color="#80F5F5F5" />
            </shape>
        </item>
    </selector>
    

    【讨论】:

    • 谢谢。我知道这种方法。我希望找到一个不涉及两个图标或可绘制对象的解决方案。而且,调整 alpha 会给人一种“变灰”的良好印象,具体取决于渗出的背景颜色。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-17
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多