Android 当SwitchPreference的状态从off变为on时,如何更改其图标?

Android 当SwitchPreference的状态从off变为on时,如何更改其图标?,android,android-layout,switchpreference,Android,Android Layout,Switchpreference,一旦状态从“开”更改为“关”,我想更改SwitchPreference中的图标(例如,用于启用通知声音),反之亦然 SwitchPreference switchPreference = (SwitchPreference) settingsFragment.findPreference("pref_key_sound"); 这是我的首选项代码: <SwitchPreference android:key="@string/pref_key_sound" android:

一旦状态从“开”更改为“关”,我想更改SwitchPreference中的图标(例如,用于启用通知声音),反之亦然

SwitchPreference switchPreference = (SwitchPreference) settingsFragment.findPreference("pref_key_sound");
这是我的首选项代码:

<SwitchPreference
    android:key="@string/pref_key_sound"
    android:id="@+id/pref_key_sound"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:title="@string/pref_sound"
    android:summaryOff="Off"
    android:summaryOn ="On"
    android:showText="true"
    android:defaultValue="false"
    android:icon="@mipmap/ic_volume"
/>
SwitchPreference switchPreference = (SwitchPreference) settingsFragment.findPreference("pref_key_sound");

正如您在这里看到的,我只设置了一个固定图标。

我解决了这个问题

SwitchPreference switchPreference = (SwitchPreference) settingsFragment.findPreference("pref_key_sound");
在我的首选项活动中,我注册了我的SharedReferences以侦听以下更改:
prefs.RegisterOnSharedReferenceChangeListener

SwitchPreference switchPreference = (SwitchPreference) settingsFragment.findPreference("pref_key_sound");
onSharedPreferenceChanged
回调中,我只是检查该键是否与我的
SwitchPreference
对应,如果是,我通过获取存储在
SharedReferences
中的布尔值来检查它是否被选中:

SwitchPreference switchPreference = (SwitchPreference) settingsFragment.findPreference("pref_key_sound");
boolean-isOn=sharedPreferences.getBoolean(getString(R.string.pref_-key_-sound),true);

SwitchPreference switchPreference = (SwitchPreference) settingsFragment.findPreference("pref_key_sound");
之后,我获得了对我的偏好的参考:

SwitchPreference switchPreference = (SwitchPreference) settingsFragment.findPreference("pref_key_sound");
只需根据布尔值
isOn
更改图标即可,因为每次按下开关时该值都会更新:

SwitchPreference switchPreference = (SwitchPreference) settingsFragment.findPreference("pref_key_sound");
if (isOn) {

     switchPreference.setIcon(R.mipmap.ic_volume);

   } else {

      switchPreference.setIcon(R.mipmap.ic_volume_off);

   }

就这么简单!:)希望它是清楚的

这需要相当多的工作才能完成。这可能对你有帮助。在我必须进行此类自定义的情况下,我求助于使用自定义类。@JanithaR有一个更简单的解决方案-而不是制作自定义布局并应用它。可以通过样式应用“拇指”和“轨迹”属性。你的主题:切换样式你的拇指你的轨迹@X3Btel Hmmm。。。我想这比较容易,但我相信这在很多情况下会导致问题。我想不起为什么我现在坚持创建自定义类,对此我很抱歉。无论如何,如果这是你建议的解决方案,那么最好教育他如何正确使用9个补丁。创建一个自定义选择器,如:还不够吗?
SwitchPreference switchPreference = (SwitchPreference) settingsFragment.findPreference("pref_key_sound");