Android 代碼裏動態設置TextView/Button等的文字顏色Seletor

  • 前言
    今天遇到個很蛋疼的問題,下載時,多個按鈕共用一個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。

淺薄理解,歡迎大家討論!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章