Preference(一)--基础介绍

796 阅读2分钟

「这是我参与2022首次更文挑战的第8天,活动详情查看:2022首次更文挑战

我们先看看官网对Preference的介绍

The Preference library allows you to build interactive settings screens, without needing to handle interacting with device storage or managing the user interface

Preference是Android重要控件之一,在androidx.preferences,Settings模块就是通过Preference实现的,它会自动保存到SharePreference文件中,路径为:ata/data/[packgename]/shared_prefs/

1. 使用

  • 添加依赖
dependencies {
    def preference_version = "1.2.0"
    // Java language implementation
    implementation "androidx.preference:preference:$preference_version"
    // Kotlin
    implementation "androidx.preference:preference-ktx:$preference_version"
}
  • 继承PreferenceActivity,重写相关的方法(官方建议PreferenceActivity与PreferenceFragment一起使用,PreferenceActivity负责加载列表布局,PreferenceFragment负责加载选项配置布局)
  • 创建xml文件布局,通过addPreferencesFromResource()加载静态xml

2. 子类

  • 直接子类:DialogPreference、PreferenceGroup、SeekBarPreference、TwoStatePreference
  • 间接子类:CheckBoxPreference、DropDownPreference、EditTextPreference、ListPreference、MultiSelectListPreference、PreferencesCategory、PreferenceScreen、SwitchPreferenceCompat

3.常用的Preference控件

  • PreferenceScreen 相当与ViewGroup,我们构建一个Preference的XML需要让PreferenceScreen作为第一个节点
  • Preference 可以认为是TextView
  • CheckBoxPreference 复选框,选中为true 未选中为false 它的值以boolean的形式储存在SharedPreferences中
  • EditTextPreference 文本输入框
  • DialogPreference 输入框
  • ListPreference 类似下拉框。点击之后会弹出一个单选列表对话框
  • SeekBarPreference 会显示SeekBar,用户可通过拖动布局中对应SeekBar更改此值
  • PreferenceGroup 是Preference的集合,包含多个Preference
  • SwitchPreferenceCompat 和CheckBoxPreference类似,官方推荐使用SwitchPreferenceCompat
  • MultiSelectListPreference 多选列表

3.常用标签

  • title 这个就不多说了,就是title
  • summary 副标题
  • icon Preference的icon
  • key Preference的id
  • enabled 该Preference是否可用
  • selectable 是否可选,如果是false可以点击但是没有响应
  • intent 在xml文件的Preference标签中,可以添加intent实现意图
  • exrta 给intent标签加参数来传递参数

4.常用的事件监听

  • OnPreferenceClickListener 当Preference被点击的时候调用
  • OnPreferenceChangeListener 默认情况下,Preference会自动保存,但是设置OnPreferenceChangeListener之后,就需要用自己来保存
  • OnPreferenceTreeClickListener
  • 当点击Preference控件时首先会执行onPreferenceClick(),如果返回true,点击事件被消费,就不会执行onPreferenceTreeClick(),如果返回false,点击事件没有被消费,就会执行onPreferenceTreeClick()
  • onPreferenceTreeClick()的返回值如果为true:表示事件已经被消费,不会返回上一层。如果为false:表示事件没有被消费,需要返回上一层继续执行相关逻辑
  • onPreferenceChange(),当preference控件的value改变时会触发此方法,返回true保存新值到sharedpreference中,如果返回值为false则不会保存新值

这篇主要是对Preference控件的基础介绍,下一篇着重怎么使用