Android 如何使用选择器设置初始ListView项的背景色
我不知道该怎么办,我想将列表视图项的初始背景色设置为灰色,但它们只有在我第一次选择(并取消选择)它们后才采用正确的背景色。在第一个Android 如何使用选择器设置初始ListView项的背景色,android,android-layout,listview,Android,Android Layout,Listview,我不知道该怎么办,我想将列表视图项的初始背景色设置为灰色,但它们只有在我第一次选择(并取消选择)它们后才采用正确的背景色。在第一个项定义中,哪些属性未正确配置 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_selected="false" andro
项定义中,哪些属性未正确配置
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="false" android:state_pressed="false" android:drawable="@color/grey" />
<item android:state_pressed="true" android:drawable="@color/red"/>
</selector>
还尝试直接设置列表视图项的背景,但是选择器不再有任何效果。我建议尝试使用以下定义:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@color/red"/>
<item android:drawable="@color/grey" />
</selector>
状态列表可提取项尝试按顺序匹配。如果您想在许多情况下使用“默认”绘图,那么它应该是最后一个,没有状态标志。发件人:
在每次状态更改期间,状态列表都会从上到下遍历
与当前状态匹配的第一项将用于
选择不是基于“最佳匹配”,而只是第一项
符合该州的最低标准
还尝试直接设置列表视图项的背景,但是选择器不再有任何效果
如果我没有弄错的话,选择器将绘制在列表项后面(默认情况下)。由于将纯灰设置为列表项,因此选择器中的红色不会显示。您可以通过更改定义颜色/灰色的方式来确认这一点-尝试向其添加低alpha值。在这种情况下,红色应该通过
当然,您可以通过设置android:drawSelectorOnTop=“true”
来更改此行为-默认值为false。但是,当选择器绘制在顶部时,列表项将隐藏
无论如何-根据您所说的,您希望项目在按下时具有@color/red
背景,否则具有@color/grey
背景
查看以下各项是否满足您的要求:
可为列表项视图绘制的选择器:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@android:color/transparent"/>
<item android:drawable="color/grey" />
</selector>
简单地说,当按下列表项时,项目背景色是透明的,允许listSelector的红色可见。在所有其他情况下,灰色
颜色可见。选择器应与以下类似:
List_selector.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_selected="false"
android:state_pressed="false"
android:drawable="@drawable/gradient_bg" />
<item android:state_pressed="true"
android:drawable="@drawable/gradient_bg_hover" />
<item android:state_selected="true"
android:state_pressed="false"
android:drawable="@drawable/gradient_bg_hover" />
</selector>
希望这有帮助:)您需要在可绘图文件夹下创建一个listselector.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_selected="false"
android:state_pressed="false"
android:drawable="@drawable/gradient_bg" />
<item android:state_pressed="true"
android:drawable="@drawable/gradient_bg_hover" />
<item android:state_selected="true"
android:state_pressed="false"
android:drawable="@drawable/gradient_bg_hover" />
</selector>
然后在listview中添加:
<ListView
android:id="@+id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:divider="#b5b5b5"
android:dividerHeight="1dp"
android:listSelector="@drawable/listselector" />
- 对于列表项,定义可绘制的选择器:
res/drawable/list\u item\u background.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_enabled="true" android:state_pressed="true" android:drawable="@color/red" /> <!-- Pressed state -->
<item android:state_enabled="true" android:state_focused="true" android:drawable="@color/black" /> <!-- Focused state -->
<item android:state_enabled="true" android:state_selected="true" android:drawable="@color/orange" /> <!-- Selected state -->
<item android:drawable="@color/gray" /> <!-- Default state -->
</selector>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:background="@drawable/list_item_background" >
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/listitem" />
</LinearLayout>
- 将上述可绘制设置为单个列表项的背景:
res/layout/list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_enabled="true" android:state_pressed="true" android:drawable="@color/red" /> <!-- Pressed state -->
<item android:state_enabled="true" android:state_focused="true" android:drawable="@color/black" /> <!-- Focused state -->
<item android:state_enabled="true" android:state_selected="true" android:drawable="@color/orange" /> <!-- Selected state -->
<item android:drawable="@color/gray" /> <!-- Default state -->
</selector>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:background="@drawable/list_item_background" >
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/listitem" />
</LinearLayout>
- 使用上述自定义布局创建列表项:
String[]mStrings={“一”、“二”、“三”、“四”};
ListView list=(ListView)rootView.findViewById(R.id.list);
setAdapter(新的ArrayAdapter(this.getActivity(),R.layout.list_项,R.id.listitem,mStrings))代码>
事实上,我还没有尝试用这个来改变顺序,不幸的是,它也不起作用。。。在Android布局查看器上,它甚至拥有color@Mahoni如何/在何处设置此背景?@matiash直接在布局中使用ListView
元素,属性为android:listSelector=“@drawable/my_ListView_selector”
,看起来最有希望。列表视图的android:listSelector
设置为@color/red
,但是我在哪里设置定义的
?在item.xml
上,如果是,在哪个属性上?不,抱歉,使用渐变不会改变任何东西。正如每个人都告诉您的,您需要在list_selector.xml文件中设置3个状态:是的,我尝试过;-)在item.xml上使用background
并不能解决三态方法的问题。无论出于何种原因,在item.xml上使用属性android:background
而不是ListView
元素上的属性android:listSelector
解决了这个问题。。
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_enabled="true" android:state_pressed="true" android:drawable="@color/red" /> <!-- Pressed state -->
<item android:state_enabled="true" android:state_focused="true" android:drawable="@color/black" /> <!-- Focused state -->
<item android:state_enabled="true" android:state_selected="true" android:drawable="@color/orange" /> <!-- Selected state -->
<item android:drawable="@color/gray" /> <!-- Default state -->
</selector>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:background="@drawable/list_item_background" >
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/listitem" />
</LinearLayout>