如果您想通过仅创建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);
prefSocPin.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
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,但这次你需要创建两个项目。一个用于轨道,一个用于滑块。
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。
总之,仅通过创建xml来更改图标是一项更加困难和无效的工作,在我看来。
好吧,我仍在努力回答您想要的问题。享受吧。