PreferenceScreen 设置项

Quibbler 2020-1-18 3748

PreferenceScreen 设置项


        应用一般都有设置界面,这些通常通过SharedPreference保存在手机上(SharedPreference参考Android存储相关:SharedPreference),界面也要单独写。好在Android为我们提供了一个强大的设置界面PreferenceScreen。通过这个构建设置页面,点击界面切换设置的同时,后台也自动保存了相关数据。



1、PreferenceScreen

        使用这个的时候需要注意,应当使用androidx.preference.PreferenceScreen,而不是android.preference.PreferenceScreen。后者已经被标记为deprecate


1.1、AndroidX依赖

        Android 10开始废弃PrefeceFragment和PreferenceScreen。移到了Androidx中,可以继续使用PreferenceScreen,推荐后面全部使用AndroidX包中的依赖。

    //1.1.1和1.0.0有很大区别,为此踩了一天的坑!
    implementation 'androidx.preference:preference:1.1.1'


1.2、设置布局文件

        设置项一般先在res/xml文件夹中新建xml设置布局。


1.3、最佳学习Demo

        AndroidStudio官方Demo:New->Activity->SettingsActivity 创建的默认设置Demo


2、常用设置项

        介绍常用的设置项控件:PreferenceCategory(组)、EditTextPreference(输入项)、ListPreference(下拉选择)、MultiSelectListPreference(多选)、SwitchPreference(开关项)等。


2.1、PreferenceCategory

        也就是设置项组,将相似的设置项放在同一个PreferenceCategory中,会用分割线相区分。

    <PreferenceCategory app:title="设置组别1">
        ...
    </PreferenceCategory>


2.2、EditTextPreference

        点击该设置,会弹出一个输入框。

    <EditTextPreferenc
        app:key="signature"
        app:title="输入"
        app:useSimpleSummaryProvider="true" />


2.3、ListPreference

        下拉列表选择设置项。

    <ListPreference
        app:defaultValue="reply"
        app:entries="@array/reply_entries"
        app:entryValues="@array/reply_values"
        app:key="reply"
        app:title="下拉选择"
        app:useSimpleSummaryProvider="true" />

        属性app:entries,定义了下拉选择显示的值,定义在values/array.xml中:

    <string-array name="reply_entries">
        <item>Reply</item>
        <item>Reply to all</item>
    </string-array>

        属性app:entryValues,定义了下拉选择存储的值,也定义在values/array.xml中。

    <string-array name="reply_values">
        <item>reply</item>
        <item>reply all</item>
    </string-array>

        两者选择一一对应。一定要保证app:entriesapp:entryValues数组的长度一致,否则会出各种问题。


2.4、MultiSelectListPreference

        和前者类似,都是列表选择,不过可以多选

        且值保存在SharedPreference中是集合set形式:

    <set name="muti_select">
        <string>reply all</string>
        <string>reply</string>
    </set>


2.5、SwitchPreference/SwitchPreferenceCompat

        选择开关设置项,经常看到一些设置开关:“是否允许数据网络下载/播放”。

    <SwitchPreferenceCompat
        app:icon="@drawable/setting_icon_3"
        app:key="download"
        app:title="是否允许使用移动网络下载" />


        开关相互依赖,app:dependency属性,选择所要依赖的开关键值

    <SwitchPreferenceCompat
        app:dependency="download"
        app:iconSpaceReserved="false"
        app:key="attachment"
        app:summaryOff="不使用4G进行下载"
        app:summaryOn="使用4G进行下载"
        app:title="4G网络设置" />

       依赖开关的状态改变,不会改变后者的值,只是让其不可变更,变为“锁定”状态。

       注意使用开关依赖的时候,所依赖的键值一定要存在,否则会出错:所依赖的设置不存在


3、设置项属性

        有些属性需要使用app:而不是android:,否则设置的属性无效!

        ①app:icon

        设置项的图标

        ②app:iconSpaceReserved="false/true"

        是否保留设置项前面的icon位置,为false且没有设置icon时候会隐藏前面的区域

        ③app:title

        设置组或者设置项的标题

        ④app:key

        保存在/data/data/包名/shared_prefs/包名_preference.xml中的键值

        ⑤app:summaryOffapp:summaryOn

        用在开关设置项SwitchPreferenceCompat中,开关开关状态对应不同的说明

        ⑥app:dependency

        用于开关依赖,另一个SwitchPreferenceCompat的键值

        ⑦app:useSimpleSummaryProvider

        一般为true

        ⑧app:summary

        该设置项的摘要,显示在title底部。(如果需要显示在title右侧后边,可以自定义layout实现)

        ⑨app:defaultValue

        Preference的默认值,根据Android定义的declare-styleable(参考自定义View属性)可以看到任意类型:

    <!-- 首选项的默认值,如果关闭持久性或打开持久性并且在持久性存储中找不到该首选项,
         则将设置该默认值。  -->
    <attr format="string|boolean|integer|reference|float" name="defaultValue"/>


4、自定义Preference*

        一般自定义layout即可,或者继承Preference定制。自定义Preference前后可能会自动加上divider分割线,可以手动禁掉:

    <!-- Whether the preference allows displaying divider on top -->
    <attr format="boolean" name="allowDividerAbove"/>
    
    
    <!-- Whether the preference allows displaying divider below it -->
    <attr format="boolean" name="allowDividerBelow"/>


推荐博客:

        自定义Preference和PreferenceFragment修改

        Android进阶——Preference详解之初识Preference及Preference系

        Android进阶——Preference详解之Preference系的基本应用和管理

        Android进阶——Preference详解之Preference系的基本应用(三)


不忘初心的阿甘
最新回复 (0)
    • AI笔记本-欢迎来到 AI 驱动博客时代 🚀
      2
        登录 注册 QQ
返回
仅供学习交流,切勿用于商业用途。如有错误欢迎指出:fluent0418@gmail.com