我无法绕过这个,我想将列表视图项的初始背景颜色设置为灰色,但是在我第一次选择(并取消选择)后,它们只采用正确的背景颜色。在第一个item
定义中未正确配置哪些属性?
<?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>
还尝试直接设置列表视图项的背景,但选择器不再具有任何效果。
答案 0 :(得分:3)
<强> RES /抽拉/ list_item_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>
<强> RES /布局/ list_item.xml 强>
<?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 = {"One", "Two", "Three", "Four"};
ListView list = (ListView) rootView.findViewById(R.id.list);
list.setAdapter(new ArrayAdapter<String>(this.getActivity(), R.layout.list_item, R.id.listitem ,mStrings));
答案 1 :(得分:1)
我建议尝试使用以下定义:
<?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>
State List Drawables尝试按顺序匹配。如果你想在许多情况下使用“默认”drawable,它应该是最后一个,没有状态标志。来自docs:
在每次状态更改期间,状态列表从上到下遍历 并且使用与当前状态匹配的第一个项目 选择不是基于“最佳匹配”,而只是第一项 符合国家最低标准。
答案 2 :(得分:1)
还尝试直接设置列表视图项的背景,但是选择器不再具有任何效果。
如果我没有弄错,选择器将被列在列表项后面(默认情况下)。由于您将纯灰色设置为列表项,因此选择器中的红色不会显示。您可以通过更改定义@color/grey
的方式来确认这一点 - 尝试为其添加低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
属性,仅提供颜色值:
<ListView
....
....
android:listSelector="@color/red" >
</ListView>
简而言之,按下列表项时,项目背景颜色为transparent
- 允许listSelector red color
可见。在所有其他情况下,grey
颜色可见。
答案 3 :(得分:1)
您需要在drawable文件夹
下创建一个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
android:id="@+id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:divider="#b5b5b5"
android:dividerHeight="1dp"
android:listSelector="@drawable/listselector" />
答案 4 :(得分:0)
选择器应类似于下面的选择器:
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>
然后在drawables文件夹中,您需要创建以下2个文件:
gradient_bg.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:startColor="#cfcfcf"
android:centerColor="#737374"
android:endColor="##3e3e3e"
android:angle="270" />
</shape>
gradient_bg_hover.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:startColor="#7f0000"
android:centerColor="#660000"
android:endColor="#4c0000"
android:angle="270" />
</shape>
最后,在listview中,您需要添加以下代码行:
android:background="@drawable/list_selector"
希望这会有所帮助:)