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>