ripple drawable在Android API 19上崩溃应用程序

时间:2016-08-07 12:08:00

标签: android rippledrawable android-api-levels

我正在使用自定义涟漪reading = function() { start++; return upload(); }; var start = 0; var end = 5; var myArray = [3,5,7]; myArray.reduce(function(promise, item) { return upload() .then(function(){ console.log('hola'); }) }) function upload() { if (start < end) { console.log('doing') return reading(); } else { console.log('finished') return Promise.resolve(); } }

drawable

但它崩溃了API 19上的应用

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

   <item android:id="@android:id/mask">
        <shape android:shape="rectangle" >
            <solid android:color="@android:color/white" />
        </shape>
   </item>


</ripple>

我该怎么做才能防止崩溃?

3 个答案:

答案 0 :(得分:18)

API {21}中添加了RippleDrawable,因此早期的SDK无法使用它。

您可以将可绘制文件移动到 res / drawable-v21 ,以确保它不会在早期版本中崩溃。

答案 1 :(得分:10)

我遇到了同样的问题。

Mina Samy&#39; 的答案也解决了我的问题。

Atef Hares 要求在旧版本中提供替代方案。 对我有用的是使用选择器而不是纹波

例如:

<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>

其中

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

答案 2 :(得分:1)

波纹只能从Lollipop(Android API 21)获得。这是一个向后兼容的示例,其中包括状态且没有默认背景(透明):

创建两个具有相同名称的可绘制xml文件,一个将放置在drawable-v21文件夹中,另一个将放置在常规drawable文件夹中。

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>

然后在像这样的视图上简单地使用它:

<LinearLayout
    ...
    android:background="@drawable/ripple_red_solid" />