Android 当SwitchPreference的状态从off变为on时,如何更改其图标?
一旦状态从“开”更改为“关”,我想更改SwitchPreference中的图标(例如,用于启用通知声音),反之亦然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) 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");