Settings模块加载-preference介绍

1,331 阅读2分钟

「这是我参与11月更文挑战的第1天,活动详情查看:2021最后一次更文挑战

preference介绍

1.简介

在Android系统源码中,绝大多数应用程序的UI布局采用了Preference的布局结构,而不是我们平时在模拟器中构建应用程序时使用的View布局结构,Preference布局结构和View的布局结构本质上还是大同小异,Preference的优点在于布局界面的可控性和高效率以及可存储值的简洁性(每个Preferencece存储在相对应下的SharedPreference文件夹下)。

该文件存放路径位于data/data/packgename/shared_prefs/目录下,命名约定为:packagename_preferencse.xml。

2.preference属性

PreferenceCategory :类似于LinearLayou、RelativeLayout,用于组合一组Preference,使布局更具备层次感。 PreferenceScreen : 所有Preference元素的根节点。

1.android:key :每个Preference控件独一无二的”ID”,唯一表示此Preference。
2.android:defaultValue : 默认值。 例如,CheckPreference的默认值可为”true”,默认为选中状态;EditTextPreference的默认值可为”110” 。 3.android:enabled :表示该Preference是否可用状态。
4.android:title :每个Preference在PreferenceScreen布局上显示的标题—大标题 5.android:summary :每个Preference在PreferenceScreen布局上显示的标题—小标题(可以没有) 6.android:persistent:表示Preference元素所对应的值是否写入sharedPreferen文件中,如果是true,则表示写入;否则,则表示不写入该Preference元素的值。 7.android:dependency:表示一个Preference(用A表示)的可用状态依赖另外一个Preference(用B表示)。B可用,则A可用;B不可用,则A不可用。 8.android:disableDependentsState:与android:dependency相反。B可用,则A不可用;B不可用,则A可用。

3.preference跳转

方法一:在配置每个Preference元素节点时,我们可以显示为点击它时所跳转的Intent。点击该Preference,跳转至目标Intent。在xml中配置如下:

图片1.png

方法二:可以在onPreferenceTreeClick()创建新的intent显示的进行跳转。

(点击某个Preference控件后,会先回调onPreferenceChange()方法,即是否保存值, 然后再回调onPreferenceClick以及onPreferenceTreeClick()方法,因此在onPreferenceClick/onPreferenceTreeClick方法中我们得到的控件值就是最新的Preference控件值。)

图片2.png

4.preference默认值保存

preference设置值全部保存在XML文件中,在Android源码中,系统会加载许多默认值写入数据库中,这些默认值大部分定义在defaults.xml(/frameworks/base/packages/SettingsProvider/res/values/defaults.xml)文件中。