4

I have a LinearLayout that looks like this. enter image description here

I want each row to be clickable. The LinearLayout code for a row looks like this:

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

How can I add a ripple effect that expands over the entire row (parent) - not just one child view in the row? The tricky part here is to let the ripple go over the two colored row.

4

6 回答 6

6

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

定义你的 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>

将背景设置LinearLayoutdrawable/item_selector.

<LinearLayout
    style="@style/home_menu_item_container"
    android:background="@drawable/item_selector"
    android:id="@+id/home_menu_acronyms_button" >
     ...
</LinearLayout>

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

于 2015-09-29T18:04:53.337 回答
3

你需要的东西有点复杂,但我认为没有其他方法,......
你需要将你的 ImageView 放入 aListView中,这样ImageView is a ListItem你就可以了set the ripple,但你还需要设置,drawSelectorOnTop="true"否则它不会t 正常工作

于 2015-02-03T21:45:31.110 回答
2

我也遇到了这个问题,终于找到了一个简单的解决方案

在线性布局中只需添加 android:clickable="true"; 并将具有您的涟漪效果的背景设置为

android:background="@drawable/ripple_effect"

代码:

    <LinearLayout
        android:clickable="true"
        android:background="@drawable/ripple_effect"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

<!-- Add your child views here -->

</LinearLayout>

在drawable中添加ripple_effect.xml

波纹效果.xml:

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:color="#f87d05c2"
    tools:targetApi="lollipop">
    <item android:id="@android:id/mask">
        <shape android:shape="rectangle">
            <solid android:color="#f87d05c2" />
        </shape>
    </item>
</ripple>
于 2017-09-21T06:53:56.607 回答
2
 <RelativeLayout
        android:id="@+id/rll_privacy_policy"
        android:layout_width="match_parent"
        android:layout_height="48dp"
        android:background="?android:attr/selectableItemBackground"
        android:orientation="vertical">

            <TextView
                android:id="@+id/txt_privacy_policy"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="@dimen/layout_margin_16"
                android:text="@string/privacy_policy"
                android:layout_centerVertical="true"
                android:textColor="@color/link_acc"
                android:textSize="@dimen/txt_title_20" />

    </RelativeLayout>
于 2017-11-27T10:04:50.070 回答
1

另一种选择是使波纹的背景颜色透明。这样只能看到波纹。波纹的 xml 文件(在您的drawable-v21/文件夹中)是:

<-- Ripple in some ghastly color, like bright red so you can see it -->
<ripple
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="@color/red"
    >
<!-- background color uses a transparent mask set to full #ffffff (white) -->
<item
    android:id="@android:id/mask"
    android:drawable="@android:color/white"
    />

请注意,如果您支持 pre-lollipop 设备,则需要在drawable/文件夹中有一个同名的虚拟文件。对于该文件,一个空的选择器就足够了。请记住,那些旧设备不会产生涟漪。

于 2016-03-14T19:39:19.467 回答
-1

上面的答案对我不起作用,这是我的解决方案:

波纹.xml:

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="?android:colorControlHighlight">
    <item android:id="@android:id/mask">
        <shape android:shape="rectangle">
            <solid android:color="?android:colorAccent" />
        </shape>
    </item>
</ripple>

list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <LinearLayout
      >
       ...put het your design
    </LinearLayout>

    <View
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/ripple" />
</FrameLayout>
于 2016-03-21T12:52:02.903 回答