我的
Android应用程序中有一个SwitchPreference,可以设置为“on”或“off”.我有一个这个SwitchPreference的图标.下面的XML代码
<SwitchPreference
android:title="@string/psm_pinterest"
android:defaultValue="false"
android:key="@string/pref_social_pinterest"
android:icon="@drawable/pinterest_bw"
android:summaryOn="@string/psm_pinterest_summary_on"
android:summaryOff="@string/psm_pinterest_summary_off"/>
但是,我还希望在更改SwitchPreference时更改图标.反正有没有通过XML做到这一点?我试图使用“状态”设置创建一个“可绘制的”xml,但是当我更改SwitchPreference设置时,没有任何“状态”被调用.
我现在以编程方式处理它,但我正在寻找一种更有效的方法来通过XML本身来完成它.感谢帮助
最佳答案 通过遵循你想要的东西,只需创建xml而无需以编程方式处理来改变图标需要做很多工作才能完成,并且仍需要java / kotlin中的一些代码.
这是我尝试过的:
我一直在尝试这种方式并且它有效,图标改变了,但是一旦我说,我认为不推荐这种方式.以编程方式处理图标更改更好,更有效.
调整您的SwitchPreference
<SwitchPreference
android:title="@string/psm_pinterest"
android:defaultValue="false"
android:key="@string/pref_social_pinterest"/>
首先,在您的设置片段/活动中
设置布局以替换SwitchPreference的视图并创建开关侦听器.
例如,像这样:
SwitchPreference prefSocPin = (SwitchPreference) findPreference(getString(R.string.pref_social_pinterest));
prefSocPin.setWidgetLayoutResource(R.layout.pinterest_switch); // THIS IS THE KEY OF ALL THIS. HERE YOU SET A CUSTOM LAYOUT FOR PreferenceSwitch
prefSocPin.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
// Here you can enable/disable whatever you need to
return true;
}
});
其次,创建布局pinterest_switch.xml
例如,像这样:
<?xml version="1.0" encoding="utf-8"?>
<Switch xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/pinterest_switch_item"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:textIsSelectable="false"
android:track="@drawable/pinterest_track"
android:thumb="@drawable/pinterest_thumb"/>
第三,在drawable中
与第一次尝试相同,在drawable中为状态监听器创建xml,但这次您将创建2个项目.一次用于跟踪,一次用于拇指.
pinterest_track.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/switch_bg_focused" android:state_focused="true"/>
<item android:drawable="@drawable/switch_bg"/>
</selector>
pinterest_thumb.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/switch_thumb_disabled" android:state_enabled="false"/>
<item android:drawable="@drawable/switch_thumb_pressed" android:state_pressed="true"/>
<item android:drawable="@drawable/switch_thumb_activated" android:state_checked="true"/>
<item android:drawable="@drawable/switch_thumb"/>
</selector>
我正在跟踪this reference并根据您的需要进行一些调整.
In summary, change icon by just creating xml is a harder work and
uneffective way, in my opinion.
Well, still I’m trying to answer of what you want. Enjoy.