【问题标题】:Android Color Selector not working on Android 4Android 颜色选择器不适用于 Android 4
【发布时间】:2016-10-07 09:00:16
【问题描述】:

我有一个已定义的可绘制资源 (res/drawable/.xml),其中包含已定义的颜色资源 (res/color/.xml)。颜色资源包含状态选择器。

在 Android 5+ 中一切正常,颜色状态选择器正常工作。但在 Android 4 上它不起作用。这是为什么造成的?如何解决?

布局:

<Button
    android:background="@drawable/btn_login"

drawable/btn_login.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
            <stroke
                android:width="@dimen/login_button_border"
                android:color="@color/btn_login_border" />
            <solid android:color="@color/btn_login_background" />
        </shape>
    </item>
    <item android:bottom="@dimen/login_button_border">
        <shape android:shape="rectangle">
            <stroke
                android:width="@dimen/login_button_border"
                android:color="@color/btn_login_background" />
            <solid android:color="@android:color/transparent" />
        </shape>
    </item>
</layer-list>

color/btn_login_border.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/login_border_highlighted" android:state_pressed="true"/>
    <item android:color="@color/login_border"/>
</selector>

color/btn_login_background.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/login_button_highlighted" android:state_pressed="true"/>
    <item android:color="@color/login_button"/>
</selector>

【问题讨论】:

标签: android android-layout android-studio


【解决方案1】:

由于之前的 Lollipop 不支持 ColorStateList,也许您可​​以像这样重新组织显示的资源:

drawable/btn_login.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/login_button_highlighted" android:state_pressed="true"/>
    <item android:drawable="@drawable/login_button"/>
</selector>

drawable/btn_login_normal.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
            <stroke
                android:width="@dimen/login_button_border"
                android:color="@color/login_border" />
            <solid android:color="@color/login_button" />
        </shape>
    </item>
    <item android:bottom="@dimen/login_button_border">
        <shape android:shape="rectangle">
            <stroke
                android:width="@dimen/login_button_border"
                android:color="@color/login_button" />
            <solid android:color="@android:color/transparent" />
        </shape>
    </item>
</layer-list>

drawable/btn_login_highlihted.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
            <stroke
                android:width="@dimen/login_button_border"
                android:color="@color/login_border_highlighted" />
            <solid android:color="@color/login_button_highlighted" />
        </shape>
    </item>
    <item android:bottom="@dimen/login_button_border">
        <shape android:shape="rectangle">
            <stroke
                android:width="@dimen/login_button_border"
                android:color="@color/login_button_highlighted" />
            <solid android:color="@android:color/transparent" />
        </shape>
    </item>
</layer-list>

这将消除在这种情况下使用颜色选择器的需要。

【讨论】:

  • 是的,这是解决问题的正确方法。尽管它使可绘制对象更加复杂且难以维护。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-03
  • 1970-01-01
  • 1970-01-01
  • 2012-12-06
  • 2011-01-27
  • 2012-12-14
相关资源
最近更新 更多