Android学习笔记(四十):Preference使用

Preference从字面上看偏好,译为首选项。

一些配置数据,一些我们上次点击选择的内容。我们希望在下次应用调起的时候依旧有效,无须用户再一次进行配置或选择。Android提供preference这个键值对的方式来处理这样的情况,自己主动保存这些数据。并立时生效,同一时候Android提供一种类似的layout的方式来进行Prefernce的布局。

一个简单的Preferenece样例

步骤1:编写preference XML,在res/xml/下增加我们的preference XML文件,比如名字叫c21preference.xml

<?xml version="1.0" encoding="utf-8"?>

<!-- preference的组织方式有PreferenceScreen和PreferenceCategory。PreferenceCategory是带层次组织关系。在后面的样例体验。而PreferenceScreen就是最平白和基础的方式 -->

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">

<!-- 有四个基本组建。这个样例学习两个。里面的内容对比图,非常easy理解,RingtonePreference是选择铃音,这里给出两个选择,系统默认的铃音和无声 -->

<CheckBoxPreference android:key="checkbox"

android:title="CheckBox Preference"

android:summary="Check it on , check it off"/>

<RingtonePreference android:key="ringtone"

android:title="Ringtone Preference"

android:showDefault="true"

android:showSilent="true"

android:summary="Pick a tone, any tone"/>

</PreferenceScreen>

步骤2:在java源码中调用该xml。生成对应的preference界面

public class Chapter21Test1 extendsPreferenceActivity{

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

addPreferencesFromResource(R.xml.c21preference);

}

}

和用layout方式一样。代码非常easy。

和以往界面最大的差别是,我们对checkbox进行选择或者对ringtone进行选择后,这个选择结果是被保留的,当我们退出actitvity后再次进入,上次的选项依旧保留。我们又一次向模拟器load应用,发现之前的选项仍然存在。我们能够利用preference。而无须人工对数据进行保存和读取,非常是方便。

步骤3:获取preference的数据

处了在preference的界面中可以保留数据,我们也希望可以读出数据,以便这些数据可以用在其它的activity中。假设还有一个activity和这些数据关联,并且希望可以实时进行同步。在onResume()中对preference保留的数据进行读取,而后进行相关的更新。

首先要获取preferences,然后通过键值对的获取方式依据key获取数值。在xml中checkbox的key为“checkbox”,值的类型为布尔值。而rintong的值为String,比如:

protected void onResume() { //在还有一个Activity中

super.onResume();

SharedPreferences prefs =PreferenceManager.getDefaultSharedPreferences(this) ;

System.out.println(new Boolean(prefs.getBoolean("checkbox",false)).toString());//false表示没有查到checkbox这个key的返回值

System.out.println(prefs.getString("ringtone","<unset>"));//<unset>表示没有查到ringtong这个key的返回值

}

获取preferences能够通过三种方式:

一、getPreferences():能够获取同一activity中的preference;

二、getSharedPreferences():能够获取映用级别的preferences()。在这个样例中因为我们封装在同一app中。也能够使用SharePreferences prefs = getSharedPreferences( "com.wei.android.learning_preferences" ,0);当中第一个參数name的格式是<package_name>_preferences;

三、getDefaultSharedPreferences():就是我们样例的方式,通过Android的偏好管理器来获取其所管理的preferences。

Preferenece数据的操作

在上面的样例中。preference的数值会被保留,并且能够在其它的activity中读取。假设须要清除数据。能够通过remove()清除某个名字的prefernece。clear()清除全部的preferences。

我们能够通过edit()获取preferences的editor,进而进行编辑,改动后。通过commit()将改动值保存。

Preferenece XML

Preference的XML能够通过PreferenceCategory来进行组织。PreferenceCategory能够将几个组建组合在一起,并加上标题。我们依旧用前面的xml样例,通过PreferenceCategory来进行组织,例如以下:和之前的样例比較。将chekcbox和rintong组织成为一个category,并加上了"simple Preferences"的标题。

<?xml version="1.0" encoding="utf-8"?

>

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">

<PreferenceCategory android:title="Simple Preferences">

<CheckBoxPreference android:key="checkbox" ..../>

<RingtonePreference android:key="ringtone" ... />

</PreferenceCategory>

</PreferenceScreen>

PreferenceCategory也能够嵌套PreferenceScreen。PreferenceScreen中的内容,将通过还有一屏来显示。我们在上面样例后面加入一个嵌套了PreferenceScreen的PreferenceCategory。整个PreferenceScreen作为一个组件出现。点击后新的一屏,由入PreferenceScreen定义。通过这个关系,我们能够组织自己的preference架构。


<?xml version="1.0" encoding="utf-8"?>

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">

<PreferenceCategory android:title="Simple Preferences">

<CheckBoxPreference android:key="checkbox" ..../>

<RingtonePreference android:key="ringtone" ... />

</PreferenceCategory>

<PreferenceCategory android:title="Detail Screens">

<PreferenceScreen android:title="Detail"

android:summary="Addtional preference help in another page">

<CheckBoxPreference android:key="checkbox2"

android:title="Another Checkbox"

android:summary="On or Off, It‘s a problem...."/>

</PreferenceScreen>

</PreferenceCategory>

</PreferenceScreen>

在前面的样例中我们使用了CheckBox和Ringtong,在以下的样例,我们实验另外的两个组建EditText和List。这两种都是已弹框的方式。

在上面的样例我们继续添加内容


<?xml version="1.0" encoding="utf-8"?>

<PreferenceScreen ...>

......

<PreferenceCategory android:title="Other Preferences">

<EditTextPreference android:key="text"

android:title="Text Entry Dialog"

android:summary="Click to pop up a field for entry"

android:dialogTitle="Enter something useful"/>

<ListPreference android:key="list"

android:title="Selection Dialog"

android:summary="Click to pop yo a list for select"

android:entries="@array/cities"

android:entryValues="@array/airport_codes"

android:dialogTitle="Choose a City"/>

</PreferenceCategory>

</PreferenceScreen>


在list中由两个引用@array/cities和@array/airport_codes。我们在资源文件里定义此两array。内容例如以下:

<resource>

<string-array>

<item>Pittsburgh</item>

<item>Allentown/Bethlehem</item>

<item>Erie</item>

... ...

</string-array>

<string-array name="airport_codes">

<item>PHL</item>

<item>PIT</item>

<item>ABE</item>

... ...

</string-array>

</resources>

执行结果如右图所看到的。对于EditText,键值对保存的值是String。即用户在输入框中输入的内容。List的情况略微复杂一些,在设置ListPreference的属性有一个entires。这是在List显示给用户看的内容,假设我们去获取preference的值。在这个样例为prefs.getString("list", "<unset>");,则返回在entryValues相应的数值。比如我们选择了第一个item:Pittsburgh,则获取的值为PHL。entries和entryValues是一一相应的。

相关链接: 我的Android开发相关文章

时间: 2024-10-26 06:08:13

Android学习笔记(四十):Preference使用的相关文章

Android学习笔记(十四)——在运行时添加碎片(附源码)

在运行时添加碎片 点击获取源码 将UI分割为多个可配置的部分是碎片的优势之一,但其真正强大之处在于可在运行时动态地把它们添加到活动中. 1.使用上一篇创建的Fragments项目,在main.xml文件中注释掉两个<fragment>元素: 2.在FragmentActivity.java中添加下面的代码: FragmentManager fragmentManager = getSupportFragmentManager();//向活动添加碎片 FragmentTransaction fr

Android学习笔记二十四之ListView列表视图二

Android学习笔记二十四之ListView列表视图二 前面一篇我们介绍了常用的几种适配器的简单实现和ListView的简单使用,这一篇中,我们介绍一下ListView的优化和一些其它的问题. ListView优化方法一 在ListView中,我们最常用的就是自定义Adapter,在我们自定义Adapter中,需要实现两个比较重要的方法getCount()和getView(),前者是负责计算ListView的总Item数,后者是生成Item,有多少个Item就会调用getView()方法多少次

Android学习笔记二十九之SwipeRefreshLayout、RecyclerView和CardView

Android学习笔记二十九之SwipeRefreshLayout.RecyclerView和CardView 前面我们介绍了AlertDialog和几个常用的Dialog,ProgressDialog进度条提示框.DatePickerDialog日期选择对话框和TimePickerDialog时间选择对话框.这一节我们介绍几个新的API控件SwipeRefreshLayout.RecyclerView和CardView,这几个API控件都是google在Android5.0推出的.下面我们来学

Android学习笔记二十之Toast吐司、Notification通知、PopupWindow弹出窗

Android学习笔记二十之Toast吐司.Notification通知.PopupWindow弹出窗 Toast吐司 Toast吐司是我们经常用到的一个控件,Toast是AndroidOS用来显示消息的一种机制,它与Dialog不同,Toast不会获取到焦点,通常显示一段时间之后就会自动消失,下面我们来介绍Toast的几种常用方式: 第一种,默认显示方式,也是最常用的方式: Toast.makeText(MainActivity.this, "这是默认的显示方式", Toast.LE

Android学习笔记二十五之ListView多布局实现

Android学习笔记二十五之ListView多布局实现 这一节是介绍ListView这个控件的最后一节,实现一个Item的多布局.像我们经常在用的各种即时通讯工具,QQ.微信等,假设他们的会话界面是ListView实现的,那么ListView就有多种Item布局,这一节,我们就来实现一个ListView的多种Item. 要实现ListView里面有多种Item,就要重写适配器的两个方法getViewTypeCount()和getItemViewType(int position),第一个方法是

Android学习笔记(十五)——碎片的生命周期(附源码)

碎片的生命周期 点击下载源码 与活动类似,碎片具有自己的生命周期.理解了碎片的生命周期后,我们可以在碎片被销毁时正确地保存其实例,在碎片被重建时将其还原到前一个状态. 1.使用上一篇的项目Fragments,在Fragment1.java文件中添加如下代码: package net.zenail.Fragments; import android.app.Activity; import android.os.Bundle; import android.support.v4.app.Fragm

Android学习笔记(十六)——碎片之间进行交互(附源码)

碎片之间进行交互 点击下载源码 很多时候,一个活动中包含一个或者多个碎片,它们彼此协作,向用户展示一个一致的UI.在这种情况下,碎片之间能进行通信并交换数据十分重要. 1.使用上一篇中创建的同一个项目,在fragment.xml中添加TextView的标识id: android:id="@+id/lblFragment1" 2.在fragment2.xml中添加一个Button,用于与fragment1进行交互: <Button android:id="@+id/btn

Android学习笔记四:添加Source

问题描述 Source not foundThe JAR file D:\.....\sdk\platforms\android-20\android.jar has no source attachment. 问题原因及解决办法 1. 使用SDK Manager下载最新版本的Sources for Android SDK 一般文件下载目录默认在SDK下的sources文件中即 \adt-bundle-windows-x86_64-20130522\sdk\sources\android-20

【Unity 3D】学习笔记四十二:粒子特效

粒子特效 粒子特效的原理是将若干粒子无规则的组合在一起,来模拟火焰,爆炸,水滴,雾气等效果.要使用粒子特效首先要创建,在hierarchy视图中点击create--particle system即可 粒子发射器 粒子发射器是用于设定粒子的发射属性,比如说粒子的大小,数量和速度等.在创建完粒子对象后,在右侧inspector视图中便可以看到所有的粒子属性: emit:是否是使用粒子发射器. min size:粒子最小尺寸. max size:粒子最大尺寸. min energy:粒子的最小生命周期

Android学习笔记(十八)——使用意图筛选器和实现浏览网页(附源码)

使用意图筛选器 点击下载源码 1.创建一个Intents项目,给该项目添加一个新类,命名为MyBrowserActivity,在res/layout文件夹下新增一个browser.xml: 2.在AndroidManifest.xml文件中添加如下代码: 添加权限: <uses-permission android:name="android.permission.CALL_PHONE" /> <uses-permission android:name="a