ripple drawable crashes the app on Android API 19

烈酒焚心 提交于 2019-12-05 05:38:01

The RippleDrawable was added in API 21, so it's not available on earlier SDKs.

You can move your drawable file to res/drawable-v21 to ensure it doesn't crash on earlier releases.

Angel Garcia

I had the same problem.

Mina Samy's answer solved my problem also.

Atef Hares asked for an alternative in older versions. What works for me is to use a selector instead of ripple

for example:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true">
        <shape android:shape="rectangle">
            <solid android:color="#ccffffff" />
        </shape>
    </item>
    <item android:state_focused="true">
        <shape android:shape="rectangle">
            <stroke android:color="@android:color/white" />
        </shape>
    </item>
    <item android:drawable="@color/playColor" />
</selector>

where

<color name="playColor">#E8EAF6</color>

Ripple is only available from Lollipop (Android API 21). Here is an example for backwards compatibility which includes states and no default background (Transparent):

Create two drawable xml files with the same name, one will be placed in the drawable-v21 folder, and the other in the normal drawable folder.

drawable-v21/ripple_red_solid.xml:

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

    <item android:id="@android:id/mask">
        <color android:color="@android:color/red" />
    </item>

    <item>
        <selector>
            <item android:state_selected="true">
                <color android:color="@android:color/red" />
            </item>
            <item android:state_activated="true">
                <color android:color="@android:color/red" />
            </item>
            <item android:state_focused="true">
                <color android:color="@android:color/red" />
            </item>
        </selector>
    </item>
</ripple>

drawable/ripple_red_solid.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_selected="true">
        <shape android:shape="rectangle">
            <solid android:color="@android:color/red" />
        </shape>
    </item>
    <item android:state_pressed="true">
        <shape android:shape="rectangle">
            <solid android:color="@android:color/red" />
        </shape>
    </item>
    <item android:state_focused="true">
        <shape android:shape="rectangle">
            <solid android:color="@android:color/red" />
        </shape>
    </item>
</selector>

And then simply use it on the view like:

<LinearLayout
    ...
    android:background="@drawable/ripple_red_solid" />
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!