我有一些CheckBoxPreferences,我没有问题通过xml更改它们的图标,如下所示here但由于用户有其他方式触发复选框的操作而不是直接点击它(即可能在另一个活动甚至是另一个应用程序)我希望能够以编程方式设置图标,具体取决于与操作一起发生的值更改。例如,如果蓝牙打开,我希望图标是一个图像,当蓝牙关闭时,我希望它是一个不同的图像。是否可以通过编程方式更改此图像?
<CheckBox xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+android:id/checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:button="@drawable/check_box_icon"
android:clickable="true"
android:focusable="false"
android:/>
答案 0 :(得分:1)
找到解决方案:
我使用了我在问题中提供的链接中找到的方法来设置选择器,以便我可以根据复选框的当前状态将所有CheckBoxPreferences用于不同的图像: -
<?xml version="1.0" encoding="utf-8"?>
//This is the xml selector "@drawable/checkbox"
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="false"
android:drawable="@drawable/checkbox_off_background" />
<item android:state_checked="true"
android:drawable="@drawable/checkbox_on_background" />
</selector>
因此,CheckBoxPreference代码也会发生变化: -
<CheckBox android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="new checkbox"
android:button="@drawable/checkbox"
android:clickable="true"
android:focusable="false" />
现在,我可以调用 Checkbox.setChecked()来检查它是否已启用,还可以通过将其设置为true或false来根据值更改它。因此,根据xml属性,这也会自动更改图标。