Android背景未在第一个实例上正确应用

时间:2016-08-04 14:23:41

标签: android android-layout material-design android-support-library

我有一个非常简单的布局,只有两个按钮在彼此之下。在两个按钮上,我将一个可绘制的图层列表设置为背景,其中包含selectableItemBackground,从而对按钮产生涟漪效应。

发生了一个奇怪的错误:在第一个按钮上,没有发生涟漪效应,但在第二个按钮上却没有。如何解释,或者它是Android /支持库中的错误?

设置点击处理程序不会改变任何内容,行为保持不变。

请参阅下面的示例gif,以及下面的XML代码。

GIF of behaviour

main_activity.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/container_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <Button
        android:id="@+id/first_button"
        android:text="First Button"
        android:layout_width="match_parent"
        android:layout_height="48dp"
        android:layout_margin="12dp"
        android:background="@drawable/white_selectable_button"/>
    <Button
        android:id="@+id/second_button"
        android:text="Second Button"
        android:layout_width="match_parent"
        android:layout_margin="12dp"
        android:layout_height="48dp"
        android:background="@drawable/white_selectable_button"/>
</LinearLayout>

white_selectable_button.xml(在res / drawable中):

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@android:color/white"/>
    <item android:drawable="?attr/selectableItemBackground"/>
</layer-list>

这个drawable似乎应用于按钮,因为当将颜色设置为红色时,按钮实际上显示为红色。仅未应用selectableItemBackground纹波。

我已经在所有版本上使用设计支持库24.1.1,23.4.0和23.2.0对此进行了测试,这不会改变任何内容。

编辑:向Android错误跟踪器提交错误报告:https://code.google.com/p/android/issues/detail?id=219620

1 个答案:

答案 0 :(得分:2)

取出您的代码并确认它也无法在我的设备上运行。我将其作为bug against the Android Support Library提交。所以最终它会得到修复。

与此同时,我想出了一个简单的解决方法来修复bug。您需要做的就是在另外两个之前添加一个不可见的虚拟按钮,因为它看起来只会影响第一个按钮。一旦谷歌确定,您最终可以将其删除。

 <Button
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:background="@drawable/white_selectable_button"
        android:visibility="gone" />