波纹效果仅适用于第一个ListView项目

时间:2015-01-21 17:03:32

标签: android

我在ListView中实现了棒棒糖中引入的涟漪效应。但它仅适用于ListView的第一项。我已经按照this question的答案,但我无法设置涟漪效应。

我在ripple_background.xml文件夹中有一个drawable-v21

<ripple
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="@android:color/background_dark">
    <item>
        <shape
            android:shape="oval">
            <solid android:color="?android:colorAccent" />
        </shape>
    </item>
</ripple>

我的ListView存在的布局如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">
    <ListView
        android:id="@+id/listSettings"
        android:listSelector="@android:color/transparent"
        android:layout_width="fill_parent"
        android:layout_height="match_parent"
        android:divider="@color/price_item_divider"
        android:dividerHeight="1dp"
        android:drawSelectorOnTop="true"/>
</LinearLayout>

并且ListView中填充的项目如下(settings_item_row.xml):

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="70dp"
    android:minHeight="?android:attr/listPreferredItemHeightSmall"
    android:background="@drawable/ripple_background"
    android:padding="16dp" >

    <ImageView
        android:id="@+id/imageViewIcon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"
        android:paddingRight="10dp" />

    <TextView
        android:id="@+id/textViewName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_toRightOf="@+id/imageViewIcon"
        android:paddingRight="10dp"
        android:textColor="@android:color/black"
        android:textSize="18sp" />

</RelativeLayout>

感谢您的帮助!

4 个答案:

答案 0 :(得分:7)

我遇到了同样的问题,并找到了解决这个问题的简单方法。无需为任何列表项或ListView设置任何背景。只需将android:listSelector设置为ListView中的涟漪抽象。

我的活动ListView看起来像是:

<ListView
        android:id="@+id/myListView"
        ...
        android:listSelector="@drawable/ripple" />

和我的波纹drawable定义为:

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="@color/rippleColour">
    <item android:drawable="@color/backgroundColour"/>
</ripple>

答案 1 :(得分:0)

刚出现这个问题并修复了它。从单个列表项视图中删除可绘制的纹波背景,然后在ListView本身上设置背景。同样,将drawSelector添加到列表项并从ListView中删除字段。

此修复仅适用于ListView的单色背景。

您的清单项目视图:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="70dp"
    android:minHeight="?android:attr/listPreferredItemHeightSmall"
    android:background="@drawable/ripple_background"
    android:padding="16dp" >

和你的ListView:

<ListView
    android:id="@+id/listSettings"
    android:listSelector="@android:color/transparent"
    android:layout_width="fill_parent"
    android:layout_height="match_parent"
    android:divider="@color/price_item_divider"
    android:dividerHeight="1dp"
    android:background="@color/__Your color here__
    />

答案 2 :(得分:0)

无需为布局添加任何背景。 只需保留布局即可。现在专注于ListView 在ListView中你可以添加自己的背景,你可以使用ListSelector来应用涟漪主题。

通过在ListView中使用ListSelector,波纹效果将对列表中的每个项目起作用,您也可以为列表项目提供默认背景(单独列在视图中)。

<ListView android:layout_width="wrap_content"  
  android:layout_height="wrap_content"  
  android:id="@+id/list"  
  android:scrollbarStyle="outsideInset" 
  android:background="#fff" 
  android:listSelector="@drawable/ripp" />

答案 3 :(得分:0)

它发生在我身上,我将可点击的值更改为true而不是它的工作。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  ....
  android:background="@drawable/touchselector"
  android:clickable="true">
  ....
</LinearLayout>