天天看點

【Android】動态設定 View 的背景顔色 BackgroundColor 無效的問題

問題描述

我們都知道 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)); // 更推薦後者
           

繼續閱讀