Android 程式碼裡動態設定TextView/Button等的文字顏色Seletor
阿新 • • 發佈:2019-02-05
- 前言
今天遇到個很蛋疼的問題,下載時,多個按鈕共用一個button,也就是不同下載狀態下,button的背景以及字型顏色都不一樣,結果自己挖了坑把自己埋進去了。
以下是我在/res/color資料夾裡給button設定的文字顏色seletor:networkdata_btn_open_txtcolor_selector.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color ="#ffffff" android:state_pressed="true"></item>
<item android:color="#ffffff" android:state_selected="true"></item>
<item android:color="#f88b00"></item>
</selector>
坑?
在程式碼裡設定顏色seletor,以為在程式碼裡直接呼叫button.setTextColor(int colorValue)
就可以了,結果執行效果讓我傻眼了。怎麼挖坑的?
mBtnDownAndOpen.setText(DOWNLOAD_OPEN); //設定button文字
mBtnDownAndOpen.setTextColor(mContext.getResources().getColor(R.color.networkdata_btn_open_txtcolor_selector)); //設定button文字顏色
mBtnDownAndOpen.setBackground(mContext.getResources().getDrawable(R.drawable.networkdata_btn_open_selector)); //設定button背景
鬱悶的是,只能讀取到沒獲取焦點時的色值,也就是 <item android:color="#f88b00"></item>
,其他狀態獲取不到。
- 如何填坑?
採用
mBtnDownAndOpen.setTextColor(mContext.getResources().getColorStateList(R.color.networkdata_btn_open_txtcolor_selector));
為button設定文字顏色。
區別在於:改之前用的是getColor,改之後用的是getColorStateList
- WHY?
文字顏色的seletor在程式碼裡的顯示形式是ColorStateList,而res/color放的就是ColorStateList資源XML檔案,getColor只能讀取單個的color。
淺薄理解,歡迎大家討論!