【问题标题】:Changing android preference icon with SwitchPreference Setting使用 SwitchPreference Setting 更改 android 首选项图标
【发布时间】:2017-12-26 19:57:01
【问题描述】:

我的安卓应用中有一个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 本身来完成它。感谢帮助

【问题讨论】:

  • Afaik,仅靠 xml 是不可能的。
  • @azizbekian - 一如既往,感谢您的专家意见....

标签: android xml


【解决方案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 中为状态侦听器创建 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 来更改图标是一项艰巨的工作,而且 无效的方式,在我看来。 好吧,我仍然试图回答你想要什么。享受吧。

【讨论】:

  • 对不起,我正在寻找一种更有效的方法。您的答案显然效率较低。不过感谢您的努力...
  • 据我所知,有效的方法是仅以编程方式设置图标。
【解决方案2】:

经过广泛的研究和咨询,目前看来,如果不编写任何相关代码,仅在 XML 中确实没有办法做到这一点。我会保持警惕,如果可能的话,我会更新分析器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-10
    • 1970-01-01
    • 2012-06-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多