如何在线性布局上产生涟漪效应,而不覆盖其子项的背景颜色?

Zak*_*rdi 4 android android-layout rippledrawable

我有一个看起来像这样的 LinearLayout。 在此处输入图片说明

我希望每一行都是可点击的。LinearLayout一行的代码如下所示:

    <LinearLayout
        style="@style/home_menu_item_container"
        android:id="@+id/home_menu_acronyms_button"
        >
        <ImageView
            style="@style/home_menu_item_left"
            android:background="@color/greyLight"

            />
        <TextView
            style="@style/home_menu_item_right"
            android:text="@string/home_menu_option_2"
            android:background="@color/grey"
            />
    </LinearLayout>
Run Code Online (Sandbox Code Playgroud)

如何添加扩展到整行(父级)的涟漪效应 - 而不仅仅是行中的一个子视图?这里的棘手部分是让涟漪越过两个彩色行。

小智 6

到目前为止,我发现最简单的方法是<ripple>在您的可LinearLayout绘制资源中定义一个,然后将 的背景设置为这个可绘制资源。

定义你的 drawable-v21/item_selector.xml

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="@color/your_background_color">
    <item android:id="@android:id/mask"
        <!--color here doesn't matter-->
        android:drawable="@android:color/white" /> 
</ripple>
Run Code Online (Sandbox Code Playgroud)

将您的背景设置LinearLayoutdrawable/item_selector.

<LinearLayout
    style="@style/home_menu_item_container"
    android:background="@drawable/item_selector"
    android:id="@+id/home_menu_acronyms_button" >
     ...
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

此外,如果您没有自己的背景颜色,那么根本不需要定义 a item_selector。您可以简单地android:background="?android:attr/selectableItemBackground"为您的LinearLayout.