练气篇:设置界面的开发利器Preference Library,了解一下~

1,667 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第12天,点击查看活动详情

接下来会对Preference Library官方库进行一个系列讲解,本篇文章是Preference Library系列的第一篇,主要是介绍Preference Library是个啥以及其基本用法。

文章所用到的依赖如下:

implementation("androidx.preference:preference-ktx:1.2.0")

Preference Library是干什么用的?

先看一段官方的解释:

image.png

简而言之,就是为了快速实现一个设置界面,并且默认通过SharedPreference将设置相关的配置数据保存到本地文件中。

比如Android Studio中自带的AVD模拟器,设置中的开发人员选项界面就是通过Preference Library实现的:

1665585247257.png

PreferencePreference Library的基础构建元素,通过各种各样的Preference构成一个个设置项来显示在设置界面。这个设置项的定义可以在xml中定义,也可以通过代码动态创建添加。

本文主要是通过在xml中构建Preference的层次结构,来快速实现简单的设置界面。

Preference Library基本使用

首先创建一个settings.xml文件,然后通过SwitchPreferenceCompat创建一个开关样式的设置项:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <SwitchPreferenceCompat
        app:icon="@drawable/ic_launcher_background"
        app:summary="显示一些内容"
        app:key="display"
        app:title="显示" />

</PreferenceScreen>

这里说下SwitchPreferenceCompat几个基本属性(其他的各种Preference也会有相同的属性):

  • app:key:设置项的标识,同时也是设置项配置写入到SharedPreference中的key

  • app:title: 设置项标题

  • app:summary:设置项内容描述

  • app:icon:设置项图标

我们可以看下预览界面的显示效果:

image.png

接下来我们看下如何将该xml配应用到显示界面上。

创建一个SettingsFragment,并继承Preference Library提供的PreferenceFragmentCompat,重写onCreatePreferences()方法:

class SettingsFragment: PreferenceFragmentCompat() {
    override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
        setPreferencesFromResource(R.xml.settings, rootKey)
    }
}

调用setPreferencesFromResource()方法将上面定义的settings.xml设置进去。

接下来添加FragmentActivity中即可:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    mBinding = ActivityDialogBinding.inflate(layoutInflater)
    setContentView(mBinding.root)

    supportFragmentManager.commit {
        replace(mBinding.contentFl, SettingsFragment())
    }
}

commit()是官方core-ktx提供的扩展库,使得我们不用关心commit()操作:

image.png

最终我们看下在界面中的显示效果:

b3badf1aae45c4d80cfe30598da7cbe.jpg

其他Preference瞥一眼

上面我们只是单独介绍了一个SwitchPreferenceCompat,接下来我们看一看其他的Preference设置项:

  1. EditTextPreference
<EditTextPreference
    app:summary="请输入一些内容吧"
    app:key="edit"
    app:title="编辑内容" />

image.png

点击这个设置项弹出编辑弹窗:

c487ed25d704ad801b94671f50c6473.jpg

2.CheckBoxPreference 显示一个单选按钮:

<CheckBoxPreference
    app:key="select"
    app:summary="请选择一些内容"
    app:title="选择" />

对应下面界面:

image.png

  1. SeekBarPreference

显示一个进度条:

<SeekBarPreference
    app:key="seekbar"
    app:summary="显示进度条"
    app:title="进度条" />

对应下面显示内容:

image.png

  1. ListPreference

显示列表:

<ListPreference
    app:entryValues="@array/list"
    app:entries="@array/list"
    app:key="list"
    app:summary="下面是一个列表"
    app:title="列表"/>

通过app:entryValuesapp:entries引用列表数据:

<string-array name="list">
    <item>列表第一条内容</item>
    <item>列表第二条内容</item>
    <item>列表第三条内容</item>
    <item>列表第四条内容</item>
</string-array>

看下显示效果:

image.png

点这个设置项,会弹出下面弹窗:

9d14e0d0880f58c0b71bc7d6bc97937.jpg

上面主要是介绍几个常用的Preference组件,其实还有其他的几个Preference组件没有介绍,感兴趣的可以自行实践。

总结

本篇文章主要是介绍Preference Library是干什么用的,以及其基本用法,最终补充了一些常见的Preference组件的使用,希望能对你所有帮助。

Preference Library还很多其他的用法,接下来的文章我们会一步步的展开讲解,最终通过实践,完成一个AVD模拟器中开发人员选项的界面。