为每个GridLayout正方形添加分隔线和波纹效果

时间:2018-11-19 20:33:37

标签: android android-recyclerview rippledrawable

我正在使用RecyclerView + GridLayout(3列)。现在,要使网格的每个正方形更具“响应性”,我希望每个正方形都将显示某种分隔线,并且用户单击的每个正方形内都会产生涟漪效应。

编辑:我添加了android:foreground="?attr/selectableItemBackground",但没有任何反应。这是现在的单项xml代码:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:padding="6dip" >

    <ImageView
        android:foreground="?attr/selectableItemBackground"
        android:id="@+id/icon"
        android:layout_width="128dp"
        android:layout_height="118dp"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true"
        android:layout_marginStart="12dp"
        android:layout_marginEnd="12dp"
        android:layout_marginTop="12dp"
        android:contentDescription="TODO"
        android:src="@drawable/ic_launcher_background" />
</RelativeLayout>

这是当前外观: NoRippleDivider

这就是我想要的样子: enter image description here

添加后,修复后当前的工作方式是

android:clickable="true"
android:focusable="true"
android:foreground="?attr/selectableItemBackground"

enter image description here

3 个答案:

答案 0 :(得分:1)

如果要自定义,可以创建如下的涟漪可绘制对象:

ripple.xml

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="@color/colorPrimaryDark">
<item android:id="@android:id/mask">
    <shape android:shape="rectangle">
        <solid android:color="@color/colorPrimaryLight" />
        <!--<corners android:radius="@dimen/button_radius_large" />-->
    </shape>
</item>

<item android:id="@android:id/background">
    <shape android:shape="rectangle">
        <gradient
            android:angle="90"
            android:endColor="@color/background"
            android:startColor="@color/background"
            android:type="linear" />
        <!--<corners android:radius="10dp" />-->
    </shape>
</item>

并按如下所示在您的布局中使用它:

android:clickable="true"
android:background="@drawable/ripple"

或 您可以这样简单地做到:

android:clickable="true"
android:focusable="true"
android:foreground="?attr/selectableItemBackground"

答案 1 :(得分:0)

您可以通过将GridItemDecoration添加到recyclerview中来添加分隔线。我建议您使用this

单击项目时添加波纹的一种简单方法是在项目视图中添加带有selectableItemBackground值的前景:

android:foreground="?attr/selectableItemBackground"

答案 2 :(得分:0)

  

尝试这种方式以获取xml中的波纹效果

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="6dip"
        android:clickable="true"
        android:focusable="true"
        android:background="?attr/selectableItemBackground">

        <ImageView

            android:id="@+id/icon"
            android:layout_width="128dp"
            android:layout_height="118dp"
            android:layout_alignParentStart="true"
            android:layout_alignParentTop="true"
            android:layout_marginStart="12dp"
            android:layout_marginEnd="12dp"
            android:layout_marginTop="12dp"
            android:contentDescription="TODO"
            android:src="@drawable/ic_launcher_background" />
    </RelativeLayout>

,并点击此链接获得项目之间的分隔线 How to add dividers and spaces between items in RecyclerView?