0介绍
Android系统内的设置界面由Android Preference相关类提供,使用preference这个键值对的方式来自动保存这些数据,并即时生效,同时Android提供一种类似layout的方式来进行Preference的布局。其中,使用PreferenceScreen和PreferenceCategory对布局进行控制,设置子项包含以下种类: LListPreference,CheckBoxPreference,EditTextPreference,RingtonePreference,EditPhoneNumberPreference等。设置数据的保存和读取通过全局保存对象SharedPreferences
实现,保存时触发相应事件通过Preference.onPreferenceChangeListener
实现。下面分别介绍各类。
1 配置文件示例
配置功能xml示例
2 设置页面布局
<?xml version="1.0" encoding="utf-8"?><PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <CheckBoxPreference android:key="music" android:title="@string/music_title" android:summary="@string/music_summary" android:defaultValue="true" /> <CheckBoxPreference android:key="hints" android:title="@string/hints_title" android:summary="@string/hints_summary" android:defaultValue="true" /> <PreferenceScreen android:key="detailSetting" android:title="@string/detail_setting_title" android:summary="@string/detail_setting_summary"> <CheckBoxPreference android:key="music1" android:title="@string/music_title" android:summary="@string/music_summary" android:defaultValue="true" /> <CheckBoxPreference android:key="music2" android:title="@string/music_title" android:summary="@string/music_summary" android:defaultValue="true" /> </PreferenceScreen> <PreferenceScreen android:key="customSetting" android:title="@string/custom_setting_title" android:summary="@string/custom_setting_summary"> <intent android:action="android.intent.action.MAIN" android:targetPackage="com.rasa.game" android:targetClass="com.rasa.game.CustomSetting" /> </PreferenceScreen> <com.rasa.game.CustomPreference android:key="my_preference" android:title="Advance Preference" android:summary="You can custom design your prefrence UI" android:defaultValue="100" /> </PreferenceScreen>
2.1 PreferenceScreen
每一个设置界面就是一个PreferenceScreen,因此其xml配置文件到根节点是 PreferenceScreen,其内可包含 PreferenceScreen, PreferenceCategory,其他设置项如 ListPreference, CheckBoxPreference等。 此项包含的所有子项在新屏幕上显示,就好像进入二级菜单。
处于内层的PreferenceScreen被点击时,在新页面中显示其内的两个CheckBoxPreference选项。
view code
<PreferenceScreen android:key="detailSetting" android:title="@string/detail_setting_title" android:summary="@string/detail_setting_summary"> <CheckBoxPreference android:key="music1" android:title="@string/music_title" android:summary="@string/music_summary" android:defaultValue="true" /> <CheckBoxPreference android:key="music2" android:title="@string/music_title" android:summary="@string/music_summary" android:defaultValue="true" /></PreferenceScreen>
也可以设置内层PreferenceScreen的Intent属性,设置点击PreferenceScreen时跳转到com.android.phone.SelectSimCard页面。如:
View Code
<PreferenceScreen android:key="config_sub" android:title="@string/sel_sub_title" android:summary="@string/sel_sub_summary" android:persistent="false"> <intent android:action="android.intent.action.MAIN" android:targetPackage="com.android.phone" android:targetClass="com.android.phone.SelectSimCard" /></PreferenceScreen>
2.2 PreferenceCategory
PreferenceCategory 为设置选项类别,其内部包含一个或多个设置选项。如 PreferenceScreen, 其他设置项如 ListPreference, CheckBoxPreference等。
PreferenceCategory在设置界面上显示为一个类别标题。 PreferenceCategory是一个逻辑上的类别概念。
3 常用设置项
ListPreference 带下拉的设置项
CheckBoxPreference 带CheckBox的设置项
EditTextPreference 输入文本到设置项
RingtonePreference 铃声设置项
EditPhoneNumberPreference 号码设置项
…...
3.1 设置项属性
Key为这个Preference的ID,设置了才可以在代码中引用
Title是显示的标题
Summary是显示在标题下的文字介绍
Dependency:可用来配置此设置项是否依赖于其他配置项,如:填写一个CheckBoxPreference的Key,这样就会在填写的那个CheckBoxPreference勾选时当前这个Preference才可用
Default Value为初始值
4 自定义设置项
默认提供的设置项不能满足全部要求,因此,会根据需要对设置项进行自定义。
1)首先扩展Preference类,注意使用SharedPreferences对配置项进行保存。
2)定义此Preference类对应的layout
3)直接用标签引用此Preference。如:
View Code
<com.rasa.game.CustomPreference android:key="my_preference" android:title="Advance Preference" android:summary="You can custom design your prefrence UI" android:defaultValue="100" />
5 设置变化事件
6 设置的读取和保存
1.全局保存对象SharedPreferences
在android中,最简单的持久化数据的办法是使用Preferences API,获取preference对象有三种方式,都是通过Activity对象的方法,获取的是android.content.SharedPreferences对象实例。
getPreferences():获取到作用域是本Activity的preference
getSharedPreferences():获取到作用域是本应用程序的preference
getDefaultSharedPreferences():获取到全局作用域的preference
保存方式如下:
View Code
String STORE_NAME = "Settings"; SharedPreferences settings = getSharedPreferences(STORE_NAME, MODE_PRIVATE); SharedPreferences.Editor editor = settings.edit(); editor.putInt("sourceType", 0); editor.commit(); SharedPreferences实例是通过:
get方法获取对应键的值;
edit方法获取SharedPreferences.Editor对象
通过SharedPreferences.Editor的put方法写入键值对
保存需要commit方法
2.是否保存
Preference.setOnPreferenceChangeListener
通过在子类中调用此方法来设置监听,在变化后进行保存。
ListPreference继承于DialogPreference,对onDialogClosed函数进行了覆盖,代码如下:
View Code
@Override protected void onDialogClosed(boolean positiveResult) { super.onDialogClosed(positiveResult); if (positiveResult) {// 是否是ok按钮点击?----------------------------------------(A) String value = mEditText.getText().toString();// 获取EditText控件的内容 if (callChangeListener(value)) {// 应用层是否关注此值变化---------------------(C) setText(value);// 设置新的值--------------------------------------------------(D) } } }
从以上可以看到,如果应用层允许保存用户设置的新值,则进行保存
其中(D)最终调用Preference类的setPersistentString()函数进行保存。
此函数可以从Preference.java的源码callChangeListener看到,看应用程序是否设置了
setOnPreferenceChangeListener,这个一般是继承的PerferenceActivity的类来调用一个listener或者自身,
如果没有没有设置 ,用户即忽略参数变化。
转载博客园:
http://archive.cnblogs.com/a/2172773/
分享到:
相关推荐
综上所述,自定义Android的Preference样式涉及到多个层次,包括使用主题、布局、视图、属性和代码动态修改。理解这些方法,开发者可以根据自己的需求为用户创造更加美观和个性化的设置界面。在实际项目中,应根据...
总结,Preference是Android开发中的一个强大工具,通过它可以快速构建出美观且易于使用的设置界面。理解并熟练运用Preference的使用、监听事件以及数据持久化,能够极大地提高开发效率。通过自定义Preference,...
本篇文章将深入探讨如何在Android项目中使用Preference,通过实例代码来展示其用法。 一、Preference概述 Preference是Android SDK中的一个类,位于`android.preference`包下,它为应用程序提供了用户设置界面的...
Android提供preference这个键值对的方式来处理这种情况,自动保存这些数据,并立时生效,同时Android提供一种类似的layout的方式来进行Preference的布局。 Preference组件有ListPreference,EditTextPreference,...
Preference,比如系统设置、短信都可以使用,简单而又好使用,而且Google原生Android代码中大量的使用了Preference组件。简单说, Preference组件其实就是Android常见UI组件与SharePreferences的组合封装实现。
上篇博文代码实现了Android自带的preference组件,本文将通过实例讲解自定义preference组件。 主要通过以下几步来实现: 1.定义需要的layout布局res->layout->xml文件; 2.通过继承Preference类,来实现自定义...
在Android开发中,Preference是用于构建用户界面的一种重要组件,特别是在设置界面的实现上。它提供了许多预定义的UI元素,如开关按钮、选择列表、输入框等,使得开发者能够快速构建具有交互性的配置界面。本篇文章...
Android的Preference Framework是Android系统中用于构建设置界面的一个强大工具,它允许开发者通过XML定义各种偏好设置元素,如开关按钮、选择列表等,然后在应用中轻松地将这些设置集成到用户界面。这个框架大大...
本Demo旨在展示如何在Android应用中使用Preference来实现用户设置的保存与读取。 首先,我们需要在布局文件(通常是res/xml/preference.xml)中定义Preference视图。这个XML文件包含了各种Preference类型的节点,如...
此DEMO内含基本的android preference framework的简单介绍,包括CheckboxPreference, RingtonePreference, EditTextPreference以及...主要探究了一下android 怎么通过使用preference从而达到对用户定制的数据进行保存。
Preference_Demo是一个基于Android平台的源码示例,主要展示了如何在Android应用中使用Preference组件。Preference类是Android SDK提供的一种用于创建用户设置界面的工具,它允许开发者以一种声明式的方式定义设置项...
本篇文章将详细讲解如何在Android中使用各种类型的Preference,特别是ListPreference。 首先,我们来看一下ListPreference的使用。ListPreference在Android中用于创建一个下拉列表供用户选择。在Listing 11–1中...
这篇名为“Android学习笔记 - Preference的使用”的博客文章可能涵盖了以下关键知识点: 1. **Preference基础知识**: - `Preference` 类是Android中的一个抽象类,它是所有设置项的基础。`CheckBoxPreference`、`...
它的使用方式与`PreferenceActivity`类似,但更易于在现代Android项目中集成。 总结一下,`PreferenceActivity`是Android中构建设置界面的便捷工具。通过XML定义偏好项,结合`addPreferencesFromResource()`加载,...
Preference Demo是一个典型的Android设置界面实现案例,它展示了如何将上述各种Preference类型组合使用,构建出完整的设置界面。通过学习和分析这个Demo,开发者可以快速掌握Preference的用法,并将其应用到实际项目...
- 优秀的毕业设计还会考虑API兼容问题,可能使用`androidx.preference`库以支持低版本Android设备。 通过研究此项目的源码,开发者可以学习到如何构建可维护、可扩展的用户设置模块,这对于任何Android应用都是必...
在这个"Android_Preferences_example"中,我们可以看到如何创建和使用Preference来构建一个功能完备的设置界面。 1. **Preference的基本概念**: - `Preference`类是Android中的一个抽象基类,用于表示用户可以在...
本篇文章将深入探讨`Android程序 preference应用`,并结合一个注册案例来详细阐述如何在应用程序中使用Preference及其数据存储机制。 首先,`Preference`类是Android SDK中的一个关键组件,位于`android.preference...
android-support-v7-preference.jar
Android的设置界面实现比较简单,有时甚至只需要使用一个简单的xml文件即可.声明简单,但是如何从PreferenceScreen或者PreferenceCategory中删除一个Preference会简单么.为什么有些人写的就无法删除成功呢?本文将从...