Android:按钮,后台有Ripple和状态选择器:未找到资源异常

Android:按钮,后台有Ripple和状态选择器:未找到资源异常,android,android-layout,android-button,rippledrawable,Android,Android Layout,Android Button,Rippledrawable,我有一个具有涟漪效果的按钮,希望在按钮启用/禁用时为背景色添加一个状态选择器 state_selector.xml: <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:color="@color/green" android:state_enabled="true

我有一个具有涟漪效果的按钮,希望在按钮启用/禁用时为背景色添加一个状态选择器

state_selector.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:color="@color/green" android:state_enabled="true"/>

    <item android:color="@color/grey" android:state_enabled="false"/>

</selector>

有人能帮忙解决这个问题吗? 谢谢,我找到了问题

ripple需要一个可提取的资源

我使用的状态选择器并没有为每个状态提供可绘制的颜色,而是为每个状态提供了一种颜色。就这样,它崩溃了

以下状态选择器的xml将解决此问题。其他一切都是一样的

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@color/green" android:state_enabled="true"/>

    <item android:drawable="@color/grey" android:state_enabled="false"/>

</selector>

我发现了问题

ripple需要一个可提取的资源

我使用的状态选择器并没有为每个状态提供可绘制的颜色,而是为每个状态提供了一种颜色。就这样,它崩溃了

以下状态选择器的xml将解决此问题。其他一切都是一样的

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@color/green" android:state_enabled="true"/>

    <item android:drawable="@color/grey" android:state_enabled="false"/>

</selector>

我认为@Sunny的答案很有效

这个建议可能有些过分,但您也可以像这样将ripple和选择器组合到一个xml文件中。这是一个圆形透明按钮,具有波纹和启用和禁用状态

按钮\u透明\u background.xml

<ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="@color/white">

    <item>
        <selector>
            <item android:state_enabled="true">
                <shape xmlns:android="http://schemas.android.com/apk/res/android"
                    android:shape="rectangle">
                    <corners android:radius="100dp" />
                    <solid android:color="@color/transparent" />
                    <stroke
                        android:width="1dp"
                        android:color="@color/white" />
                </shape>
            </item>

            <item android:state_enabled="false">
                <shape xmlns:android="http://schemas.android.com/apk/res/android"
                    android:shape="rectangle">
                    <corners android:radius="100dp" />
                    <solid android:color="@color/transparent" />
                    <stroke
                        android:width="1dp"
                        android:color="@color/whiteTransparent" />
                </shape>
            </item>
        </selector>
    </item>

    <item
        android:id="@android:id/mask"
        android:state_pressed="true">
        <shape xmlns:android="http://schemas.android.com/apk/res/android"
            android:shape="rectangle">
            <corners android:radius="100dp" />
            <solid android:color="@color/white" />
            <stroke
                android:width="1dp"
                android:color="@color/white" />
        </shape>
    </item>

</ripple>

将其添加到按钮的背景属性或styles.xml

<style name="buttonRound" parent="Base.Widget.AppCompat.Button">
        <item name="android:background">@drawable/button_transparent_background</item>
</style>

@可绘制/按钮\u透明\u背景

我认为@Sunny的答案很有效

这个建议可能有些过分,但您也可以像这样将ripple和选择器组合到一个xml文件中。这是一个圆形透明按钮,具有波纹和启用和禁用状态

按钮\u透明\u background.xml

<ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="@color/white">

    <item>
        <selector>
            <item android:state_enabled="true">
                <shape xmlns:android="http://schemas.android.com/apk/res/android"
                    android:shape="rectangle">
                    <corners android:radius="100dp" />
                    <solid android:color="@color/transparent" />
                    <stroke
                        android:width="1dp"
                        android:color="@color/white" />
                </shape>
            </item>

            <item android:state_enabled="false">
                <shape xmlns:android="http://schemas.android.com/apk/res/android"
                    android:shape="rectangle">
                    <corners android:radius="100dp" />
                    <solid android:color="@color/transparent" />
                    <stroke
                        android:width="1dp"
                        android:color="@color/whiteTransparent" />
                </shape>
            </item>
        </selector>
    </item>

    <item
        android:id="@android:id/mask"
        android:state_pressed="true">
        <shape xmlns:android="http://schemas.android.com/apk/res/android"
            android:shape="rectangle">
            <corners android:radius="100dp" />
            <solid android:color="@color/white" />
            <stroke
                android:width="1dp"
                android:color="@color/white" />
        </shape>
    </item>

</ripple>

将其添加到按钮的背景属性或styles.xml

<style name="buttonRound" parent="Base.Widget.AppCompat.Button">
        <item name="android:background">@drawable/button_transparent_background</item>
</style>

@可绘制/按钮\u透明\u背景

min sdk是什么?23。Ripple是受支持的你的min sdk是什么?23。Ripple受支持感谢您的详细回答!最后是一个有效的版本。选择器项下的第二项使其工作。谢谢谢谢你的详细回答!最后是一个有效的版本。选择器项下的第二项使其工作。谢谢
<style name="buttonRound" parent="Base.Widget.AppCompat.Button">
        <item name="android:background">@drawable/button_transparent_background</item>
</style>