ListSelector适用于整个列表
我有一个列表select器像这样简单的列表。
<ListView android:id="@+id/list" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_below="@+id/round" android:listSelector="#99000000" android:clickable="true" android:cacheColorHint="#00000000" android:background="#00000000"> </ListView>
正如你所看到的android:listSelector =“#99000000”,但“黑色alpha”颜色应用于整个列表,而不是选定的项目。
所以这就是我现在所拥有的,但整个列表仍然变黑
:: listview_background.xml
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_enabled="false" android:state_focused="true" android:drawable="@drawable/list_normal" /> <item android:state_pressed="true" android:drawable="@drawable/list_pressed" /> <item android:state_focused="true" android:drawable="@drawable/list_active" /> </selector>
:: colors.xml
<resources> <drawable name="list_normal">#96FFFFFF</drawable> <drawable name="list_active">#66000000</drawable> <drawable name="list_pressed">#CA000000</drawable> </resources>
::我的列表中的xml标签
android:listSelector="@drawable/listview_background"
我有同样的问题。 我有一个自定义的背景图片,我不想让这个背景图片的变体,因为这将是繁琐的代表所有不同的状态。
所以我想做一些明显的事情,在关注的listitem顶部有一个半透明的条形图,当用户点击“enter”键或者其他任何东西时,它会闪烁到被按下的覆盖色,更不透明。
解决scheme是远离任何@color或@drawable,指的是listSelector中的颜色。 我创build了两个3×3像素.png文件。 每个都保存在伽玛图层中。 在我的情况下,它是两个相同的颜色,每个在Gimp中混合在一起,颜色层上有不同的透明度。 所以当你select一个项目时,你会得到一个覆盖25%的颜色,当你按下它,你会得到一个50%的颜色PNG。 我把它们放在我的drawable中,像bg_list_item_pressed.png和bg_list_item_highlighted.png
然后我将我的列表select器设置为:
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- Selected --> <item android:state_focused="true" android:state_pressed="false" android:drawable="@drawable/bg_list_item_highlighted" /> <!-- @drawable/tab_focus --> <!-- Pressed --> <item android:state_pressed="true" android:drawable="@drawable/bg_list_item_pressed" /> <!-- @drawable/tab_press --> </selector>
然后我将我的listSelector属性添加到我的布局xml中的ListView中:
android:listSelector="@drawable/list_selector" android:drawSelectorOnTop="true"
现在,它的工作原理是如何工作的。 包括使用D-padselect一行,并用回车单击它。 获得突出显示和后续按下的颜色应该如何。
我遇到了同样的问题,在查看平台可绘制的XML文件之一时,我注意到通过创buildXML形状来消除创build仅用于颜色的图像文件的需要。
例如,而不是:
<item android:state_focused="true" android:drawable="@drawable/list_active" />
做:
<item android:state_focused="true"> <shape> <solid android:color="#66000000" /> </shape> </item>
除了创build一个简单的颜色drawable,形状是灵活的,类似于一个简单的vector对象。 所有的细节可以在这里find: http : //developer.android.com/guide/topics/resources/drawable-resource.html#Shape
如果你正在为列表中的每个项目设置一个行布局,这就是我如何做到的。 请注意设置为listSelector的透明值。 (为了简洁,我删除了colors.xml。)
main.xml中
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <ListView android:id="@android:id/list" android:layout_width="match_parent" android:layout_height="match_parent" android:listSelector="#00000000"/> </LinearLayout>
row.xml
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/row" android:layout_width="fill_parent" android:layout_height="?android:attr/listPreferredItemHeight" android:background="@drawable/list_selector"> ... </FrameLayout>
list_selector.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:drawable="#66FFFFFF" /> <item android:drawable="#FF666666"/> </selector>
贾克斯,
我试图找出为什么我的整个列表改变颜色设置listSelector,并发现这正是它应该做的,即我们设置整个列表的颜色,而不是我们的行想。
这是你想要做的:我假设你有一个用XML定义的ListView。 而对于这个ListView,我假设你正在使用某种适配器来设置数据。 此外,对于此适配器,您正在使用一些在XML中定义的行视图。 你想要做的就是像这样设置这个行元素的背景:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal" android:background="@drawable/textview_selector"> <TextView android:id="@+id/textForList" android:layout_height="fill_parent" android:layout_width="wrap_content" android:padding="10sp" /> </LinearLayout>
这是我的textview_selector.xml存储在绘制:
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:drawable="@drawable/teal" /> <item android:drawable="@drawable/white" /> </selector>
希望这可以帮助
列表select器是一个StateListDrawable
– 它包含对列表可以是,如选定,聚焦,按下,禁用每个状态的多个可绘制的引用…
在你的情况下,通过设置一个单一的颜色,该列表为每个单一的状态#9000。
您需要像上面所描述的那样定义一个StateListDrawable
,其XML类似于以下内容。 这是你在你的android:listSelector
属性中设置的。
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_enabled="false" android:state_focused="true" android:drawable="@drawable/item_disabled" /> <item android:state_pressed="true" android:drawable="@drawable/item_pressed" /> <item android:state_focused="true" android:drawable="@drawable/item_focused" /> </selector>
或者,要为应用程序中的所有列表设置相同的列表select器,可以覆盖Widget.ListView
主题中的select器:
<style name="Widget.ListView" parent="Widget.AbsListView"> <item name="android:listSelector">@drawable/my_custom_selector</item> </style>
你并不总是需要创build一个图像,你可以定义一个形状
<?xml version="1.0" encoding="utf-8"?>
<item android:state_focused="true" android:state_pressed="false"> <shape android:shape="rectangle"> <solid android:color="#40000000"/> </shape> </item> <item android:state_pressed="true"> <shape android:shape="rectangle"> <solid android:color="#80000000"/> </shape> </item>