我们在前面的例子Android ApiDemo示例解析(9):App->Activity->Persistent State 介绍了可以使用Shared Preferences来存储一些状态,Shared Preferences更一般的用法是用来存储一些应用程序偏好(设置)。

包android.preference 提供了很多类可以方便应用程序来显示和设置应用相关的偏好。当然你可以使用自定义的UI来配置这些程序偏好。但使用android.preference 中定义的类可以给用户一个统一的UI (和Android本身的Settings一致)。

通常情况下,程序偏好使用单独的Activity(派生于PreferenceActivity)来完成。在PreferenceActivity 中,PreferenceScreen为Layout 的root element ,它可以包含其它如:CheckBoxPreference ,EditTextPreference, ListPreference ,PreferenceCategory或RingtonPreference. 使用Preference时所有程序偏好将会自动保存在应用程序的SharedPreferences中, 应用可以通过getSharedPreferences() 来访问这些偏好设置。

  • CheckBoxPreference 使用Checkbox 来显示某个配置项。
  • EditTextPreference 使用文本框来显示某个配置项,允许接受用户输入文本。弹出dialog
  • ListPreference 使用一组单选钮 (列表)可以从中选择某一项。弹出dialog
  • MultiSelectListPreference 使用一组Checkbox,允许该配置项有多值。
  • RingtonPreference 允许用户从选取某个铃声

这些类的基类为Preference ,以它为基类,也可以定义自定义的Preference.

  • PreferenceGroup 可以为多个Preference定义一个组,PreferenceCategory, PreferenceScreen为它的子类。
  • PreferenceCategory 同样可以包含多个Preferneces ,如果该组被Disable时,可以提供一个标题。
  • PreferenceScreen 为 Preferences层次结构的根元素,PreferenceScreen可以实现嵌套。内层的PreferenceScreen将会使用一个新的屏幕显示,有点类似于Word中的分页功能。

Preferences from XML 介绍了使用XML来定义应用程序偏好,并使用PreferenceActivity来显示这个偏好。

R.xml.preferences的定义如下:

<!-- This is a primitive example showing the different types of preferences available. -->

<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"> <PreferenceCategory
android:title="@string/inline_preferences"> <CheckBoxPreference
android:key="checkbox_preference"
android:title="@string/title_checkbox_preference"
android:summary="@string/summary_checkbox_preference" /> </PreferenceCategory> <PreferenceCategory
android:title="@string/dialog_based_preferences"> <EditTextPreference
android:key="edittext_preference"
android:title="@string/title_edittext_preference"
android:summary="@string/summary_edittext_preference"
android:dialogTitle="@string/dialog_title_edittext_preference"
/> <ListPreference
android:key="list_preference"
android:title="@string/title_list_preference"
android:summary="@string/summary_list_preference"
android:entries
="@array/entries_list_preference"
android:entryValues
="@array/entryvalues_list_preference"
android:dialogTitle="@string/dialog_title_list_preference" /> </PreferenceCategory> <PreferenceCategory
android:title="@string/launch_preferences"> <!-- This PreferenceScreen tag serves as a screen break (similar to page break
in word processing). Like for other preference types, we assign a key
here so it is able to save and restore its instance state. -->
<PreferenceScreen
android:key="screen_preference"
android:title="@string/title_screen_preference"
android:summary="@string/summary_screen_preference"> <!-- You can place more preferences here that will be shown on the next screen. --> <CheckBoxPreference
android:key="next_screen_checkbox_preference"
android:title="@string/title_next_screen_toggle_preference"
android:summary="@string/summary_next_screen_toggle_preference" /> </PreferenceScreen> <PreferenceScreen
android:title="@string/title_intent_preference"
android:summary="@string/summary_intent_preference"> <intent android:action="android.intent.action.VIEW"
android:data="http://www.android.com"
/> </PreferenceScreen> </PreferenceCategory> <PreferenceCategory
android:title="@string/preference_attributes"> <CheckBoxPreference
android:key="parent_checkbox_preference"
android:title="@string/title_parent_preference"
android:summary="@string/summary_parent_preference" /> <!-- The visual style of a child is defined by this styled theme attribute. -->
<CheckBoxPreference
android:key="child_checkbox_preference"
android:dependency="parent_checkbox_preference"
android:layout="?android:attr/preferenceLayoutChild"

android:title="@string/title_child_preference"
android:summary="@string/summary_child_preference" /> </PreferenceCategory> </PreferenceScreen>

而在代码中使用addPreferencesFromResource(R.xml.preferences) 显示出XML所定义的Preferences。

XML中根元素为PreferenceScreen.

CheckBoxPreference

PreferenceCategory定义该组配置的标题,CheckBoxPreference使用Checkbox来显示该配置项。

    <PreferenceCategory
android:title="@string/inline_preferences"> <CheckBoxPreference
android:key="checkbox_preference"
android:title="@string/title_checkbox_preference"
android:summary="@string/summary_checkbox_preference" /> </PreferenceCategory>

EditTextPreference

EditTextPrefernece显示一个文本框来接受用户输入:

        <EditTextPreference
android:key="edittext_preference"
android:title="@string/title_edittext_preference"
android:summary="@string/summary_edittext_preference"
android:dialogTitle="@string/dialog_title_edittext_preference" />

ListPreference

显示一组单选钮。

        <ListPreference
android:key="list_preference"
android:title="@string/title_list_preference"
android:summary="@string/summary_list_preference"
android:entries="@array/entries_list_preference"
android:entryValues="@array/entryvalues_list_preference"
android:dialogTitle="@string/dialog_title_list_preference" />

PreferenceScreen

使用新的屏幕显示该应用程序偏好配置。

        <!-- This PreferenceScreen tag serves as a screen break (similar to page break
in word processing). Like for other preference types, we assign a key
here so it is able to save and restore its instance state. -->
<PreferenceScreen
android:key="screen_preference"
android:title="@string/title_screen_preference"
android:summary="@string/summary_screen_preference"> <!-- You can place more preferences here that will be shown on the next screen. --> <CheckBoxPreference
android:key="next_screen_checkbox_preference"
android:title="@string/title_next_screen_toggle_preference"
android:summary="@string/summary_next_screen_toggle_preference" /> </PreferenceScreen>

Intent Preference

除了新起一个屏幕之外,PreferenceScreen也可以用来启动一个Activity,下面定义启动浏览器打开http://www.android.com。

        <PreferenceScreen
android:title="@string/title_intent_preference"
android:summary="@string/summary_intent_preference"> <intent android:action="android.intent.action.VIEW"
android:data="http://www.android.com" /> </PreferenceScreen>

Preference之间的依赖

最后一个例子表示可以定义Preference之间的依赖关系。子Preferences只有在父Preference选中时才被Enable。

    <PreferenceCategory
android:title="@string/preference_attributes"> <CheckBoxPreference
android:key="parent_checkbox_preference"
android:title="@string/title_parent_preference"
android:summary="@string/summary_parent_preference" /> <!-- The visual style of a child is defined by this styled theme attribute. -->
<CheckBoxPreference
android:key="child_checkbox_preference"
android:dependency="parent_checkbox_preference"
android:layout="?android:attr/preferenceLayoutChild"
android:title="@string/title_child_preference"
android:summary="@string/summary_child_preference" /> </PreferenceCategory>

【起航计划 027】2015 起航计划 Android APIDemo的魔鬼步伐 26 App->Preferences->Preferences from XML 偏好设置界面的更多相关文章

  1. 【起航计划 002】2015 起航计划 Android APIDemo的魔鬼步伐 01

    本文链接:[起航计划 002]2015 起航计划 Android APIDemo的魔鬼步伐 01 参考链接:http://blog.csdn.net/column/details/mapdigitap ...

  2. 【起航计划 037】2015 起航计划 Android APIDemo的魔鬼步伐 36 App->Service->Remote Service Binding AIDL实现不同进程间调用服务接口 kill 进程

    本例和下个例子Remote Service Controller 涉及到的文件有RemoteService.java ,IRemoteService.aidl, IRemoteServiceCallb ...

  3. 【起航计划 031】2015 起航计划 Android APIDemo的魔鬼步伐 30 App->Preferences->Advanced preferences 自定义preference OnPreferenceChangeListener

    前篇文章Android ApiDemo示例解析(31):App->Preferences->Launching preferences 中用到了Advanced preferences 中 ...

  4. 【起航计划 020】2015 起航计划 Android APIDemo的魔鬼步伐 19 App->Dialog Dialog样式

    这个例子的主Activity定义在AlertDialogSamples.java 主要用来介绍类AlertDialog的用法,AlertDialog提供的功能是多样的: 显示消息给用户,并可提供一到三 ...

  5. 【起航计划 012】2015 起航计划 Android APIDemo的魔鬼步伐 11 App->Activity->Save & Restore State onSaveInstanceState onRestoreInstanceState

    Save & Restore State与之前的例子Android ApiDemo示例解析(9):App->Activity->Persistent State 实现的UI类似,但 ...

  6. 【起航计划 003】2015 起航计划 Android APIDemo的魔鬼步伐 02 SimpleAdapter,ListActivity,PackageManager参考

    01 API Demos ApiDemos 详细介绍了Android平台主要的 API,android 5.0主要包括下图几个大类,涵盖了数百api示例:

  7. 【起航计划 035】2015 起航计划 Android APIDemo的魔鬼步伐 34 App->Service->Local Service Controller

    Local Service Controller 是将LocalService当作“Started”Service来使用,相对于”Bound” Service 来说,这种模式用法要简单得多,Local ...

  8. 【起航计划 034】2015 起航计划 Android APIDemo的魔鬼步伐 33 App->Service->Local Service Binding 绑定服务 ServiceConnection Binder

    本例和下列Local Service Controller 的Activity代码都定义在LocalServiceActivities.Java 中,作为LocalServiceActivities ...

  9. 【起航计划 033】2015 起航计划 Android APIDemo的魔鬼步伐 32 App->Service->Foreground Service Controller service使用,共享service,前台服务,onStartCommand

    Android系统也提供了一种称为“Service”的组件通常在后台运行.Activity 可以用来启动一个Service,Service启动后可以保持在后台一直运行,即使启动它的Activity退出 ...

随机推荐

  1. 线段树 SP1716 GSS3 - Can you answer these queries III

    SP1716 GSS3 - Can you answer these queries III 题意翻译 n 个数,q 次操作 操作0 x y把A_xAx 修改为yy 操作1 l r询问区间[l, r] ...

  2. SpriteBuilder 不能对设置spriteframe的sprite进行设置dynamic Physics解决办法

    可能spriteBuilder是最新推出 cocos2d 可视化,在学习过程中遇到一些Bug,比如你对一个精灵设置了一个动画帧(spriteframe),这并不会改变他的物理属性,正常来说是可以设置他 ...

  3. 牛客寒假算法基础集训营4 B applese 走方格

    链接:https://ac.nowcoder.com/acm/contest/330/B 构造题,但是有两个特判... 1  2 2  1 然后就水了,血亏 #include<stdio.h&g ...

  4. main.obj:-1: error: LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject const * __thiscall CustomButton::metaObject(void)const " (?metaObject@CustomButton@@UBEPBUQMetaObject@@XZ)

    QTCreator 运行时报错 main.obj:-1: error: LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject cons ...

  5. pytorch tensor与numpy转换

    从官网拷贝过来的,就是做个学习记录.版本 0.4 tensor to numpy a = torch.ones(5) print(a) 输出 tensor([1., 1., 1., 1., 1.]) ...

  6. 关闭 chrome 自动填充

    <input name="uname" type="text" required autocomplete="off" class=& ...

  7. 1047 邮票面值设计 (DFS+DP)

    题目描述 Description 给定一个信封,最多只允许粘贴N张邮票,计算在给定K(N+K≤40)种邮票的情况下(假定所有的邮票数量都足够),如何设计邮票的面值,能得到最大值MAX,使在1-MAX之 ...

  8. POJ 3281 Dining ( 最大流 && 建图 )

    题意 : 有 N 头牛,John 可以制作 F 种食物和 D 种饮料, 然后接下来有 N 行,每行代表一头牛的喜好==>开头两个数 Fi 和 Di 表示这头牛喜欢 Fi 种食物, Di  种饮料 ...

  9. 75th LeetCode Weekly Contest All Paths From Source to Target

    Given a directed, acyclic graph of N nodes.  Find all possible paths from node 0 to node N-1, and re ...

  10. UntraEdit 语法高亮 (MSSQL)

    http://www.ultraedit.com/downloads/extras/wordfiles.html 这里有ue 支持的语言的uew文件. 需要把下载的语法文件放到: %APPDATA%\ ...