为每个 GridLayout 正方形添加分隔线和波纹效果
Add dividers and ripple effect for each GridLayout square
我正在使用 RecyclerView + GridLayout(3 列)。现在要使网格的每个方块更多 "responsive",我希望每个方块都显示某种分隔线,并且在用户单击的每个方块内都会产生涟漪效应。
编辑: 我添加了 android:foreground="?attr/selectableItemBackground"
,但现在 happens.This 没有任何内容是单个项目 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>
这是目前的样子:
这就是我想要的样子:
这是修复后当前的工作方式,添加后:
android:clickable="true"
android:focusable="true"
android:foreground="?attr/selectableItemBackground"
您可以通过将 GridItemDecoration 添加到 recyclerview 来添加分隔线。我建议你使用 this.
单击项目时添加波纹的一种简单方法是将具有 selectableItemBackground 值的前景添加到项目的视图中:
android:foreground="?attr/selectableItemBackground"
如果你想自定义它,你可以像这样创建一个波纹图:
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"
try this way for Ripple Effect in 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>
并遵循此 link 用于项目之间的分隔线
How to add dividers and spaces between items in RecyclerView?
我正在使用 RecyclerView + GridLayout(3 列)。现在要使网格的每个方块更多 "responsive",我希望每个方块都显示某种分隔线,并且在用户单击的每个方块内都会产生涟漪效应。
编辑: 我添加了 android:foreground="?attr/selectableItemBackground"
,但现在 happens.This 没有任何内容是单个项目 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>
这是目前的样子:
这就是我想要的样子:
这是修复后当前的工作方式,添加后:
android:clickable="true"
android:focusable="true"
android:foreground="?attr/selectableItemBackground"
您可以通过将 GridItemDecoration 添加到 recyclerview 来添加分隔线。我建议你使用 this.
单击项目时添加波纹的一种简单方法是将具有 selectableItemBackground 值的前景添加到项目的视图中:
android:foreground="?attr/selectableItemBackground"
如果你想自定义它,你可以像这样创建一个波纹图:
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"
try this way for Ripple Effect in 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>
并遵循此 link 用于项目之间的分隔线 How to add dividers and spaces between items in RecyclerView?