开发遇到以下需求,点击列表项改变背景和字体颜色,效果如下图:
我们可以看到左边是一个listView,点击选中其中一项就会变成跟其他项不一样的背景颜色,字体颜色也会不一样,这样的效果怎么实现?
先从ListView属性出发,设置它为单选:
android:choiceMode="singleChoice"
<ListView
android:id="@+id/lv_symptoms"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="none"
android:choiceMode="singleChoice"
android:fadingEdge="none"
android:divider="@null"
android:cacheColorHint="@android:color/transparent"
android:background="@color/main_color"
android:layout_weight="3"/>
然后设置它的item布局的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="wrap_content"
android:orientation="vertical"
android:background="@drawable/item_single_choice_selector">
<TextView
android:id="@+id/tv_bodysymptoms"
android:layout_width="match_parent"
android:layout_height="60dp"
android:duplicateParentState="true"
android:gravity="center"
android:text="全部症状"
android:textColor="@drawable/item_text_choice_selector"
android:textSize="14sp" />
</LinearLayout>
这里我们设置了item父布局的selector,也设置了textView的textColor,其中要设置TextView的这个属性:android:duplicateParentState="true"
"item_single_choice_selector"
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/choice_bg_color"/>
<item android:state_selected="true" android:drawable="@drawable/choice_bg_color"/>
<item android:state_activated="true" android:drawable="@drawable/choice_bg_color"/>
<item android:drawable="@drawable/main_color"/>
</selector>
"item_text_choice_selector"
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:color="@color/main_color"/>
<item android:state_selected="true" android:color="@color/main_color"/>
<item android:state_activated="true" android:color="@color/main_color"/>
<item android:color="@color/white"/>
</selector>
这是比较简单实现ListView单选的方法,大家可以参考一下。