gpt4 book ai didi

android - Android 中的自定义 SwitchPreference

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:55:55 31 4
gpt4 key购买 nike

如何为 Android 中的 SwitchPreference 小部件设置自定义样式或其他可绘制背景选择器?

(注意:不是常规的 Switch 小部件,我指的是 PreferenceActivity/PreferenceFragment SwitchPreference 小部件)

最佳答案

您必须为开关本身创建一个自定义布局,并且您可以动态地应用它。

preference.setWidgetLayoutResource(R.layout.custom_switch);

但我会详细介绍并向您展示如何实现这一目标。

因此,您可以在类似 preferences.xml

的 xml 文件中定义您的首选项
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
<PreferenceCategory android:title="YOUR_CATEGORY_TITLE" >
<SwitchPreference
android:key="SWITCH"
android:title="YOUR_TITLE_FOR_SWITCH" />
</PreferenceCategory>
</PreferenceScreen>

然后在 PreferenceActivty 类中的 onCreate() 方法中读取它:

    SwitchPreference pref = (SwitchPreference) findPreference(getString(R.string.SWITCH));
//pref.setChecked(true); // You can check it already if needed to true or false or a value you have stored persistently
pref.setWidgetLayoutResource(R.layout.custom_switch); // THIS IS THE KEY OF ALL THIS. HERE YOU SET A CUSTOM LAYOUT FOR THE WIDGET
pref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {

@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
// Here you can enable/disable whatever you need to
return true;
}
});

custom_switch 布局如下所示:

<?xml version="1.0" encoding="utf-8"?>
<Switch xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/custom_switch_item"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:textColor="@android:color/white"
android:textIsSelectable="false"
android:textSize="18sp"
android:textStyle="bold"
android:track="@drawable/switch_track"
android:thumb="@drawable/switch_thumb"/>

对于开关,您将有 2 个选择器用于 trackthumb 属性。这些选择器的可绘制对象可以使用 Android Holo Color Generator 生成,这是由 tasomaniac 建议的.在这种情况下,您所要做的就是复制生成的可绘制文件夹的内容(仅适用于 drawable-hdpi、drawable-mdpi、drawable-xhdpi、drawable-xxhdpi)。但是您可以为每个需要的状态创建自定义 View 。

下面是这些选择器的样子:switch_track:

<?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>

switch_thumb:

<?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>

差不多就这些了。这个解决方案帮助了我。如果我遗漏了什么,请告诉我,我会改正这些问题。

关于android - Android 中的自定义 SwitchPreference,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21235829/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com