簡體   English   中英

使用SwitchPreference Setting更改android偏好圖標

[英]Changing android preference icon with SwitchPreference Setting

我的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做到這一點嗎? 我嘗試使用“狀態”設置創建“ drawable ” 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"/>

三,在繪畫中

與您的第一次嘗試相同,在可繪制的狀態監聽器中創建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>

我正在根據您的需要對此參考進行一些調整。

總而言之,我認為僅通過創建xml來更改圖標是一項更艱巨且無效的方法。 好吧,我仍然想回答您想要的東西。 請享用。

經過廣泛的研究和咨詢,看來如果不編寫任何相關代碼,現在真的沒有辦法僅使用XML來實現。 我將進行監視,如果可能的話,我將更新分析器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM