問題描述
我們都知道 setBackgroundColor() 方法用于動态設定 view 的背景顔色。今天在做需求的時候,需要根據情況動态更新自定義 view 的背景顔色,于是就想當然的這麼寫:
結果呈現出來的 UI 效果并不是我們想要的。納悶了好久。。。。
然而,如果自己定義一個 color.xml 檔案,然後在 xml 中引用此檔案中的顔色,卻是一切順利。
原因:
顔色4個位元組從高到低對應 不透明度 紅 綠 藍 四個分量,0xFFFFFF 對應不透明度的分量是0,是以後面不管是什麼背景都是透明的。0xFFFFFFFF 就是白色了,0x80FFFFFF 就是半透明的白色。
1、Color.rgb() 會自動把不透明讀設成255,
2、解析字元串顔色 “#FFFFFF” 也能判斷出隻給出了三個分量會自動把不透明度設成255。
3、而對于整數0xFFFFFF和0x00FFFFFF是一樣的,是完全透明的。
解決辦法
1、可以參考, HEX與RGB互相轉換
2、利用系統的 parseColor 設定(HEX 形式/16進制形式)
3、通過 resources 或者 ContextCompat(推薦)
setBackgroundColor(getResources().getColor(R.color.cornflowerblue));
setBackgroundColor(ContextCompat.getColor(this, R.color.message_red)); // 更推薦後者