在 XML 佈局中為 CheckBox 設定 android:background="@drawable/checkbox_selector_hangye" 後,發現未選中狀態下仍顯示系統預設的方框邊框,導致自定義圖片無法完美呈現。
CheckBox 繼承自 CompoundButton,其預設外觀由 android:button 屬性控制(即左側的勾選圖標)。即使覆蓋了 background,button 圖層仍會疊加在上層,形成「雙層背景」現象。
在 XML 中顯式將 button 設為空:
<CheckBox
android:id="@+id/xuanze"
android:layout_width="16dp"
android:layout_height="16dp"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="@dimen/margin_width"
android:background="@drawable/checkbox_selector_hangye"
android:button="@null"
android:clickable="false" />
在 res/drawable/checkbox_selector_hangye.xml 定義狀態列表:
<selector xmlns:android="https://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:drawable="@drawable/ic_checked" />
<item android:state_checked="false" android:drawable="@drawable/ic_unchecked" />
<item android:state_pressed="true" android:drawable="@drawable/ic_pressed" />
<item android:drawable="@drawable/ic_default" />
</selector>
配合 android:button="@null" 即可實現完全自定義的 CheckBox 樣式,包含按下、選中、未選中、不可用等狀態。
checkBox.setButtonDrawable(null); // Java
checkBox.buttonDrawable = null // Kotlin
至此,系統預設方框徹底移除,UI 效果完全由設計稿掌控。