直接在 selector XML 中引用顏色資源(<item android:drawable="@color/xxx" ...>)**無法生效**,因為 selector 的 drawable 屬性期望的是 Drawable 對象,而純顏色值不是 Drawable。
res/drawable/tv_selected_bg.xml
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="https://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/bg_item_list" />
</shape>
res/drawable/tv_normal_bg.xml
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="https://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/transparent" />
</shape>
res/drawable/selector_education.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="https://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/tv_normal_bg" android:state_selected="false" />
<item android:drawable="@drawable/tv_selected_bg" android:state_selected="true" />
</selector>
<TextView
android:id="@+id/tv5"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="本科"
android:textColor="@color/white"
android:paddingLeft="25dp"
android:paddingTop="10dp"
android:paddingBottom="10dp"
android:clickable="true"
android:focusable="true"
android:background="@drawable/selector_education" />
textView.setOnClickListener(v -> {
// 單選邏輯:先取消其他,再選中當前
textView.setSelected(!textView.isSelected());
});
@color。android:clickable="true" 且 android:focusable="true" 才能接收觸摸事件觸發狀態變化。state_pressed 是點擊瞬間,state_selected 是持久選中態,兩者互不衝突,按需組合。按此結構配置,TextView 選中狀態背景變色即可完美生效。