我在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>
感谢您的帮助!
答案 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>