【问题标题】:ripple effect on recyclerview items对 recyclerview 项目的连锁反应
【发布时间】:2016-04-19 13:16:50
【问题描述】:

我正在使用

android:background="?android:attr/selectableItemBackground"

在recyclerview的项目被触摸时添加涟漪效果。 长时间单击列表项时,我确实会显示一个操作栏。但是,该项目不再突出显示。我曾经有一个选择器

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true">
    <shape>
        <solid android:color="@color/selector"/>
    </shape>
</item>

<item android:state_pressed="true">
    <shape>
        <solid android:color="@color/selector"/>
    </shape>
</item>

<item>
    <shape>
        <solid android:color="@android:color/transparent"/>
    </shape>
</item>
</selector>

作为背景以突出显示所选项目,但因为我想要波纹动画,所以我选择了 selectableItemBackground 的东西。 这里有一些帖子展示了如何将波纹文件保存在具有 21 个文件扩展名的文件夹中。但是,波纹标签仅适用于 API 级别 21 及更高版本。由于我希望拥有比 api 级别 21 及更高级别更亮的设备覆盖范围,因此我在徘徊是否有另一个可以将我的选择器与涟漪的东西结合起来。

谢谢

【问题讨论】:

    标签: android android-recyclerview ripple


    【解决方案1】:

    我发现了一个使用 FrameLayout 解决问题的好方法。

    recyclerview 项目的布局如下:

    <?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
        android:layout_width="match_parent"
        android:layout_height="?android:attr/listPreferredItemHeight"
        android:background="@drawable/selector"
        android:orientation="vertical">
    
        <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                      android:layout_width="match_parent"
                      android:layout_height="0dp"
                      android:layout_marginLeft="@dimen/activity_horizontal_margin"
                      android:layout_weight="1"
                      android:gravity="center_vertical"
                      android:orientation="vertical">
    
            <TextView
                android:id="@+id/name"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:ellipsize="marquee"
                android:singleLine="true"
                android:textColor="@color/modelTitelColor"
                android:textStyle="bold"/>
    
            <TextView
                android:id="@+id/objects"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:ellipsize="marquee"
                android:singleLine="true"
                android:textColor="@color/cardview_background"
                android:textStyle="normal"/>
        </LinearLayout>
    
    
        <View
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:background="?android:attr/listDivider"/>
    </LinearLayout>
    
    <View
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="?android:attr/selectableItemBackground"/>
    </FrameLayout>
    

    诀窍是将选择器设置为内部 LinearLayout 的背景,并将著名的 selectedItemBackground 用于 FrameLayout 内的视图。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-12
      • 2017-06-06
      相关资源
      最近更新 更多