一、问题
在项目中经常遇到,Textview 点击同时改变 字体的颜色、字体的背景需求。
二、处理思路
使用 color /drawable 所对应的 Selector文件。
三、使用过程
1、在color (要是没有需要自己手动创建) 和 drawable中创建 selector 文件;
其中 :ask_pop_filter_color.xml 文件内容:
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:color="@color/white_ff" android:state_selected="true"/> <item android:color="@color/exercise_restart_btn_bg" android:state_selected="false"/> <!--<item android:color="@color/white_ff" android:state_pressed="true"/>--> <!--<item android:color="@color/exercise_restart_btn_bg"/>--> </selector>
ask_filter_popbg_select.xml 文件内容:
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/shape_rectangle_bg_yellow" android:state_selected="true"/> <item android:drawable="@drawable/shape_rectangle_bg_white" android:state_selected="false"/> </selector>
2、TextView 使用
<TextView android:id="@+id/tv_all" android:background="@drawable/ask_filter_popbg_select" android:textColor="@color/ask_pop_filter_color" android:layout_marginRight="20dp" android:layout_toLeftOf="@+id/tv_asked" android:layout_width="60dp" android:layout_height="40dp" android:layout_centerVertical="true" android:gravity="center" android:text="全部"/>
3、在代码中设置 TextView 的select
mTextview.setSelected(false);
mTextview.setSelected(true);
控制 textview 的字体颜色 和背景图片。
还有很多的控件都可以使用selector ,总结备忘下。
四、坑!!!
需要注意的就是 selector 的两种写法:
错误写法:设置后无效!
<item android:color="@color/exercise_restart_btn_bg"/> <item android:color="@color/white_ff" android:state_selected="true"/> <item android:color="@color/exercise_restart_btn_bg" android:state_selected="false"/>
正确写法:
<item android:color="@color/white_ff" android:state_selected="true"/> <item android:color="@color/exercise_restart_btn_bg" android:state_selected="false"/> <item android:color="@color/exercise_restart_btn_bg"/>
或者
<item android:color="@color/white_ff" android:state_selected="true"/> <item android:color="@color/exercise_restart_btn_bg" android:state_selected="false"/>
至于原因 还没弄明白,请高人指教。。。