我目前有一个 ListView,每行包含一个 Radiobutton 和一个 TextView。ListView 使用自定义适配器,并且我为 ListView 提供了 android:choiceMode="singleChoice" 指令,以确保只能从列表中选择单个元素。但是,我似乎无法突出显示所选项目。
下面是 ListView 的 XML 声明:
<ListView android:id="@+id/employees_list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:paddingLeft="2dp"
android:paddingRight="1dp"
android:background="@drawable/borderlist"
android:choiceMode="singleChoice"
android:listSelector="#48ad82"
android:layout_below="@id/employees_header">
</ListView>
这是 ListView 行的 XML 声明:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/row_employee"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingLeft="10dp"
android:paddingTop="13dp"
android:paddingBottom="13dp"
android:descendantFocusability="blocksDescendants">
<RadioButton android:id="@+id/radio_employee"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:focusable="false"/>
<TextView
android:id="@+id/text_employeename"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18sp"
android:layout_toRightOf="@id/radio_employee"
android:layout_marginTop="3dp"
android:layout_marginLeft="5dp"
android:focusable="false" />
</RelativeLayout>
由于我想交替行的颜色,我通过编程在每一行上设置了一个选择器,我在自定义适配器的 getView 中有这段代码:
// Alternate row colors.
if (position % 2 == 0) {
v.setBackgroundResource(R.drawable.selector_list1);
} else {
v.setBackgroundResource(R.drawable.selector_list2);
}
这是 selector_list1 的 XML 声明,selector_list2 是相同的,除了第一个可绘制对象:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="false" android:state_pressed="false" android:drawable="@color/white" />
<item android:state_pressed="true" android:drawable="@color/lightgreen_listpressed" />
<item android:state_selected="true" android:state_pressed="false" android:drawable="@color/lightgreen_listpressed" />
</selector>
State_pressed 有效,但我尝试使用 state_activated、state_selected、state_enabled、state_checked,但没有任何效果可以更改所选列表项的颜色。难道我做错了什么?
编辑 1:如果我只是将我的选择器扔出窗口(IE 不使用它们),选择着色仅适用于我在 ListView 声明中的 android:listSelector="#48ad82" 指令。为什么这不适用于选择器?
编辑 2:再次尝试所有不同的状态,包括完全删除 listSelector 指令时的 state_focused 。仍然没有结果。
编辑 3:我想问题是 ListView 本身允许选择,RelativeLayout 视图永远不会真正被“选中”,因此在它上面设置选择器是没用的。如果是这种情况,我应该在哪里以及如何设置选择器以让他们做我想让他们做的事情?
编辑 4:我尝试根据本教程在适配器上设置颜色:http: //eureka.ykyuen.info/2010/03/15/android-%E2%80%93-applying-alternate-row-color-in- listview-with-simpleadapter/没有结果,除非我调用 android:drawSelectorOnTop="true" 来隐藏 ListView 元素中的所有元素,否则我仍然没有得到任何选择颜色。
编辑 5:我现在要放弃这个,完全删除交替的颜色。我在 StackOverflow 或 Google 上找到的任何解释都没有谈到这个问题。使这个“工作”的唯一方法是调用 android:drawSelectorOnTop="true",它确实改变了当前在 ListView 中选择的元素的颜色,但是,它隐藏了该行中的所有内容。