www.cftea.com

PreferenceActivity、PreferenceFragment 配置功能-第一篇:初步结识

ITPOW2017/3/16 11:05:01

传统的配置方法是:自己布局文本框、多选框、列表框,然后将配置数据保存或加载在文件中

其实我们也可以用另一套办法,安卓有一个模板:Settings Activity。这里面为我们写好了数据保存和加载,我们完全不用操心,更重要的是,我们不再是直接布局文本框、多选框、列表框,而是使用 PreferenceScreen

由于不是布局文件(实际也是起布局的作用),所以不是放在 layout 文件夹的,而是放在 xml 文件夹的。

根元素:PreferenceScreen,其下可以有以下元素:

  • CheckBoxPreference
  • EditTextPreference
  • ListPreference
  • MultiSelectListPreference
  • RingtonePreference:这个特殊,专门处理铃声的。
  • SwitchPreference
  • Preference:这个特殊,是调用系统设置,

名称望名生义,属性名称也是。

  • key:这个不仅要在本 xml 文件中唯一,也不能与其他 xml 中的 key 冲突。
  • title:不解释。
  • summary:标题下的简介。
  • defaultValue
    • 如果不是布尔、数字、或引用,则显示红色,不用担心,只要我们认为这里可以用普通字符串,就大胆地用。
    • 如果是列表,则 defaultValue 是指第几项的值,而不是指第几项。
  • entries:列表文字项,用 @array/ 引用 strings.xml 中的 string-array。
  • entryValues:列表值项。
  • negativeButtonText:对于列表,它会弹出一个对话框显示列表项,negativeButtonText 指定了对话框的“取消”按钮的文字。
  • positiveButtonText:与 negativeButtonText 意思相反。不过这个按钮不一定在所有对话框都显示,因为现在流行的思路是不要“确定”按钮。

说说前面的 Preference,真的用起来很简单,很方便。

点击它,它会自动打开系统设置。

依赖关联

比如只有选择了 A,B 才不是灰的。就是用 dependency 指定前一元素。

 

Preference 依赖关联

 

Preference 依赖关联

光有配置文件就行了?

如果是在这个 Settings Activity 模板体系下的话,首先还要在 pref_headers.xml 配置 header 关联。

还有就是程序代码,但是只要我们是选择 Settings Activity 模板,Android Studio 会把代码给我们写好,我们基本不用操作,我们只需要保证一个 xml 关联一个类就可以了,这个类继承自 PreferenceFragment,我们只需要照抄修改少量的代码就可以了。 

还有个问题

SwitchPreference、CheckBoxPreference 这类控件,展示的时候,我们都知道我们的当前值是什么。但是 EditTextPreference 一类的控件就不会,它就是这个样子:

bindPreferenceSummaryToValue

我们希望是这个样子(把值显示出来):

bindPreferenceSummaryToValue

要解决这个问题,就是在对应的类中,onCreate() 方法中增加一句:

通过 bindPreferenceSummaryToValue()、findPreference() 解决。它的原理实际就是改 summary 属性。

还有一个很重要的,我们要读取设置的值,怎么办呢?

PreferenceManager 拥有一个 SharedPreferences 实例,也拥有一个 SharedPreferences.Editor 实例。

<<返回首页<<