Android Preference使用 android preference
Android系统内的设置界面由AndroidPreference相关类提供,使用preference这个键值对的方式来自动保存这些数据,并即时生效,同时Android提供一种类似layout的方式来进行Preference的布局。其中,使用PreferenceScreen和PreferenceCategory对布局进行控制,设置子项包含以下种类:LListPreference,CheckBoxPreference,EditTextPreference,RingtonePreference,EditPhoneNumberPreference等。设置数据的保存和读取通过全局保存对象SharedPreferences
实现,保存时触发相应事件通过Preference.onPreferenceChangeListener
实现。下面分别介绍各类。
1配置文件示例
配置功能xml示例
<?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设置页面布局
2.1PreferenceScreen
每一个设置界面就是一个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.2PreferenceCategory
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才可用
DefaultValue为初始值
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中,最简单的持久化数据的办法是使用PreferencesAPI,获取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或者自身,
如果没有没有设置 ,用户即忽略参数变化。
更多阅读
诺顿Android手机安全软件2.0使用评测 诺顿安全特警
诺顿手机安全软件(Norton-Mobile Security)主要针对Android(安卓)手机设计的一款保护手机本身及其信息安全,具有防病毒功能的软件。它不仅具有防护恶意软件的功能,还能够进行设备远程锁定和数据擦除,确保手机丢失后能够及时定位手机所
怎样在Android手机配置Exchange邮箱 mac 配置exchange邮箱
怎样在Android手机配置Exchange邮箱——简介Android手机应用已经非常普遍,而Exchange邮箱在手机里应用还是比较少,往往需要自己配置才能正常使用,现在为大家分享如何在Android手机上配置Exchange邮箱怎样在Android手机配置Exchange邮
Android实时视频采集—Cameara预览采集 atom实时预览
1 概述通过AndroidCamera拍摄预览中设置setPreviewCallback实现onPreviewFrame接口,实时截取每一帧视频流数据2 知识点① Android Camera使用: 参考 Refs/Related 0-4Camera 支持格式拍照流
android开发中getAssets()得到的AssetManager不要close_Best asset assets
android开发中getAssets()得到的AssetManager不要close,应为这个AssetManager还会被系统使用。
Android LinearLayout当中layout_weight参数的使用 android linearlayout
在Android程序当中,最为常见的布局方式就是使用LinearLayout和RelativeLayout。当内部元素按照纵向或者横向的某个固定方向进行排列的时候,使用LinearLayout是比较方便