将selectableItemBackground与最终背景的形状相结合

时间:2016-10-19 20:19:32

标签: android android-layout shape rippledrawable

我有一个简单的RecyclerView,其中每行显示一行文字。每行都是可选的,所以我想使用

android:background="?attr/selectableItemBackground"

问题是RecyclerViews不允许使用分隔符;而我想要分隔线。因此我需要一个如下背景(称为bottom_line.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:bottom="1dp"
        android:left="-2dp"
        android:right="-2dp"
        android:top="-2dp">
        <shape android:shape="rectangle" >
            <stroke
                android:width="1dp"
                android:color="#FF000000" />

            <solid android:color="#00FFFFFF" />

            <padding android:left="10dp"
                android:right="10dp"
                android:top="10dp"
                android:bottom="10dp" />
        </shape>
    </item>

</layer-list>

我的问题是如何将bottom_line.xml?attr/selectableItemBackground结合起来创建一个带有涟漪的最终绘画? (我试图避免在LinearLayout中使用TextView)

2 个答案:

答案 0 :(得分:0)

您可以通过多种方式添加分隔符。

一种方法是你的单元格布局中可以有一个分隔符,它只是一个高度为1dp和灰色背景的视图。所以你不必担心组合背景drawables。

答案 1 :(得分:0)

RecyclerView确实允许分隔符。

添加DividerItemDecoration类来实现绘图,例如https://gist.github.com/alexfu/0f464fc3742f134ccd1e

addItemDecoration上使用RecyclerView

myRecyclerView.addItemDecoration(new DividerItemDecoration(mContext, DividerItemDecoration.VERTICAL_LIST, R.drawable.divider));

设置分割器可绘制,此示例具有左右插图和渐变

<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:insetLeft="16dp"
    android:insetRight="16dp">

    <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
        <gradient android:startColor="@color/dividerEdge" android:centerColor="@color/dividerCenter" android:endColor="@color/dividerEdge" android:angle="0" />
    </shape>

</inset>

或者,您可以通过添加:

为XML添加连锁效果(API 21+)
<ripple android:color="@color/somecolor">
  <item> ... </item>
</ripple>

虽然看起来你可能不需要这个......