当前位置: 首页 > 知识库问答 >
问题:

具有彩色背景和涟漪效果的Listview选择器

田晨
2023-03-14

android L开发人员预览版中的标准列表视图选择器使用颜色控制亮点用于触摸的涟漪效果,并且在不聚焦状态下具有透明背景。

我想定义一个ListView项目,它有一个彩色背景,并且仍然用相同的高亮颜色显示触摸时的涟漪效果。现在,如果我定义以下可绘制图形:

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
        android:color="?android:colorControlHighlight">
    <item android:drawable="@color/my_background_color"/>
</ripple>

它起作用,但是纹波在 ListVIEW 项中间开始,不管触摸位置如何。如果我在 列表视图之外使用相同的背景,例如,对于 线性布局,其工作原理与预期相同(纹波从触摸位置开始)。

共有3个答案

罗渝
2023-03-14

我发现只有当您将背景应用于列表项的根元素时,它才会正常工作。

此外,考虑使用新的RealReVIEW而不是ListVIEW

列表项视图示例

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="@dimen/list_padding"
    android:layout_marginLeft="@dimen/list_padding"
    android:layout_marginRight="@dimen/list_padding"
    android:padding="@dimen/list_padding"
    android:background="@drawable/ripple_bg">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Large Text"
        android:id="@+id/tvTitle"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Small Text"
        android:id="@+id/tvSubtitle" />

</RelativeLayout>
谷飞星
2023-03-14

据我所知,这个bug只存在于Android 5.0中,而不是5.1中。诀窍似乎是使用Drawable#setHotspot作为Google开发人员的提示https://twitter.com/crafty/status/561768446149410816(因为模糊的twitter提示是一种很好的文档形式!)

假设你有一个这样的行布局

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

      <LinearLayout
            android:id="@+id/row_content"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:background="?attr/selectableItemBackground">

          .... content here .....

     </LinearLayout>

</FrameLayout>

下面的对我有用

            row.setOnTouchListener(new View.OnTouchListener() {
                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    v.findViewById(R.id.row_content)
                        .getBackground()
                        .setHotspot(event.getX(), event.getY());

                    return(false);
                }
            });
包翔
2023-03-14

我在保持连锁反应的同时,成功地获得了单色列表项。使用任何适配器设置列表项的背景,并将listview设置为在顶部显示选择器:

<ListView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:drawSelectorOnTop="true" />

这将在背景上方产生涟漪效应。

 类似资料:
  • 当我触摸一个物品时,只要按下它,它就会闪烁蓝色。我想保持蓝色直到另一个项目被选中,就像Nexus7上的Gmail应用一样。 最干净的方法是什么?我宁愿避免手动设置背景,我假设有一种方法可以将一个元素标记为“活动的”元素,并相应地将其主题化。

  • 最小SDK为21。当我点击回收器适配器中的cardview时,不会产生连锁反应,只会进入下一个屏幕。recyclerview位于片段内部。 适配器代码,其中我对每个项目进行了onClick。

  • 我正在尝试将涟漪效果添加到RecyclerView的项目中。我上网看了一下,但找不到我需要的东西。我想这应该是一个自定义效果。我尝试了rodroid:background属性到RecyclerView本身,并将其设置为“?android:selectableitembackground”,但它不起作用。: 这是我试图添加效果的RecyclerView:

  • 问题内容: 我想在其CSS包含特定背景色的情况下选择一堆。我该如何实现? 问题答案: 如果我正确理解问题,则选择器 将不起作用, 因为其中不包含“ background- color”属性。您可以快速进行测试以确认它不匹配任何内容: 给出: 这里有一个片段, 将工作 :

  • 请告诉我如何实现这两个在一起,我已经经历了很多问题,但他们没有专门处理我的问题。 因此,为了实现圆形形状,我在标记中给出了。这使按钮圆角,也实现了背景颜色,但涟漪效果没有了。 第二种方法:我尝试了使用选择器。1.创建了button_background.xml button_bg.xml中按钮的舍入背景: 使用此方法,按钮只会在按下时变为白色,返回背景颜色。 请告诉我怎么做。

  • 嗨,我想让我的线性布局像按钮一样工作。我的意思是,当状态改变时,我试图改变它的背景色。我使用选择器来解决它,但它不起作用。 我寻找解决方案,他们只说添加可点击属性。我已经做过了。 我的LinearLayout包含两个LinearLayout,每个LinearLayout包含9个文本视图。它们完全填满了我的直线布局。 我想到的是它的孩子正在吸收点击事件,我的线性布局不会将其状态更改为按下。 因此,我