Android:以编程方式更改选中/取消选中的CheckBox首选项图标

时间:2012-06-14 18:53:47

标签: android image checkbox icons checkboxpreference

我有一些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:/>

1 个答案:

答案 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属性,这也会自动更改图标。