「这是我参与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控件的基础介绍,下一篇着重怎么使用