使用SwitchPreference设置更改Android首选项图标

时间:2017-10-07 03:32:18

标签: android xml

我的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"/>

但是,我还希望iconSwitchPreference更改时更改。反正有没有通过XML做到这一点?我试图创建一个&#34; drawable&#34; xml使用&#34;状态&#34;设置,但没有#34;状态&#34;我更改SwitchPreference设置时会被调用。

我现在以编程方式处理这个,但我正在寻找一种更有效的方法来通过XML本身来完成它。感谢帮助

2 个答案:

答案 0 :(得分:1)

通过按照你想要的方式,只需创建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 for state listener中创建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并根据您的需要进行一些调整。

  

总之,通过创建xml来更改图标是一项更难的工作   在我看来,无效的方式。   好吧,我仍然想回答你想要什么。享受。

答案 1 :(得分:0)

经过广泛的研究和咨询后,似乎没有办法在没有编写任何相关代码的情况下仅使用XML。我会留意,如果可行的话,我会更新anser。