我有一个ListView
项,它有一个背景设置。这将覆盖按下/选择项目时出现的默认蓝色突出显示。有没有办法同时拥有背景和选择器?
这是我尝试合并背景和选择器......
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:color="@color/red"/>
</selector>
<item>
<shape
android:dither="true"
android:shape="rectangle" >
<solid android:color="#ccc" />
</shape>
</item>
<item android:bottom="2dp">
<shape
android:dither="true"
android:shape="rectangle" >
<corners android:radius="6dp" />
<solid android:color="@android:color/white" />
</shape>
</item>
</layer-list>
这是在我的drawable
文件夹中,我在ListItem xml中设置它:
android:background="@drawable/my_background
答案 0 :(得分:1)
要有自定义背景和默认选择器效果(按下/选择时另一个drawalbe)有点困难,经过几次尝试后,我就成功了。
您应该在分隔的xml文件中定义两个选择器:listitem_background.xml
和listitem_selector.xml
。
第一个用于列表项的背景,它会在按下项目并处于正常状态时产生效果。
第二个用于列表的选择器,它将通过将所有状态设置为transparent
来摆脱列表视图的默认选择器。
默认选择器效果在第一个xml文件中定义:listitem_background.xml。
color_drawable.xml
,在res/values
目录中:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- The color of the normal state. -->
<drawable name="listitem_normal">#E671B8</drawable>
<!-- The two color below show when the item is pressed, you should change that to the color you want. -->
<drawable name="listitem_pressed">#e7eeab</drawable>
<drawable name="listitem_selected">#e7eeab</drawable>
</resources>
listitem_background.xml
中的res/drawable
:<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/listitem_pressed" android:state_enabled="true" android:state_pressed="true"/>
<item android:drawable="@drawable/listitem_selected" android:state_enabled="true" android:state_focused="true"/>
<item android:drawable="@drawable/listitem_selected" android:state_enabled="true" android:state_selected="true"/>
<item android:drawable="@drawable/listitem_normal"/>
</selector>
{h3>和listitem_selector.xml
中的res/drawable
:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/android:transparent" android:state_enabled="true" android:state_pressed="true"/>
<item android:drawable="@color/android:transparent" android:state_enabled="true" android:state_focused="true"/>
<item android:drawable="@color/android:transparent"/>
</selector>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/listitem_background" >
...
</RelativeLayout>
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:listSelector="@drawable/listitem_selector" />
答案 1 :(得分:1)
看到这再次受到一些关注,我将发布我找到的解决方案(我之前在评论中提到过):
我发现ListView中的android:drawSelectorOnTop="true"
解决了这个问题。
答案 2 :(得分:0)
在ListView中使用它来匹配颜色组合
机器人:cacheColorHint = “#e7eeab”