`
zhangziyangup
  • 浏览: 1187335 次
文章分类
社区版块
存档分类
最新评论

Android开发12:Preference布局结构小议

 
阅读更多

Preference布局结构小议

安卓程序开发中常用Preference布局结构来做程序的设置项。Android系统会将Preference元素的值存储在sharedPreference文件中,方便了数据的管理。该文件存放路径位DDMS视图下data/data/[packgename]/shared_prefs/文件下,命名约定为:packagename_preferencse.xml。Preference的优点在于布局界面的可控性和高效率以及可存储值的简洁性。

获取preferences可以通过三种方式:
一、getPreferences():可以获取同一activity中的preference;
二、getSharedPreferences():可以获取映用级别的preferences(),在这个例子中由于我们封装在同一app中,也可以使用SharePreferences prefs = getSharedPreferences("com.wei.android.learning_preferences" ,0);其中第一个参数name的格式是<package_name>_preferences;
三、getDefaultSharedPreferences():

Preference的Activity继承PreferenceActivity,然后在onCreate()方法中通过addPreferencesFromResource(R.xml.custom_preference) (我们自定义的Preference 布局)。

Preference元素的通用XML Attributes说明:

android:key : 每个Preference控件独一无二的”ID”,唯一表示此Preference。

android:defaultValue : 默认值。 例如,CheckPreference的默认值可为”true”,默认为选中状态;ditTextPreference的默认值可为”110” 。

android:enabled :表示该Preference是否可用状态。

android:title :每个Preference在PreferenceScreen布局上显示的标题——大标题

android:summary : 每个Preference在PreferenceScreen布局上显示的标题——小标题(可以没有)

android:persistent:表示Preference元素所对应的值是否写入sharedPreferen文件中,如果是true,则表示写入;否则,则表示不写入该Preference元素的值。

android:dependency:表示一个Preference(用A表示)的可用状态依赖另外一个Preference(用B表示)。B可用,则A可用;B不可用,则A不可用。

android:disableDependentsState:与android:dependency相反。B可用,则A不可用;B不可用,则A可用。

常用的方法则包括: getKey()setKey()

getSummary() setSummary()

getText()setText()

重点:分析Preference事件

PreferenceActivity方法中,一个比较重要的监听点击事件方法为:

publicbooleanonPreferenceTreeClick(PreferenceScreen preferenceScreen,Preference preference)

说明:当Preference控件被点击时,触发该方法。

参数说明: preference 点击的对象。

返回值: true 代表点击事件已成功捕捉,无须执行默认动作或者返回上层调用链。例如,不跳转至默认Intent。false 代表执行默认动作并且返回上层调用链。例如,跳转至默认Intent。

在我们继承PreferenceActivity的Activity可以重写该方法,来完成我们对Preference事件的捕捉。

Preference相关的两个重要监听接口。

1Preference.OnPreferenceChangeListener 该监听器的一个重要方法如下:

boolean onPreferenceChange(Preference preference,Object objValue)

说明: 当Preference的元素值发送改变时,触发该事件。

返回值:true 代表将新值写入sharedPreference文件中。false 则不将新值写入sharedPreference文件

2Preference.OnPreferenceClickListener。该监听器的一个重要方法如下:

publicbooleanonPreferenceClick(Preference preference)

说明:当点击控件时触发发生,可以做相应操作。

那么当一个Preference控件实现这两个接口时,当被点击或者值发生改变时,触发方法是如何执行的呢?事实上,

它的触发规则如下:

1先调用onPreferenceClick()方法,如果该方法返回true,则不再调用onPreferenceTreeClick方法 ;

如果onPreferenceClick方法返回false,则继续调用onPreferenceTreeClick方法。

2onPreferenceChange的方法独立与其他两种方法的运行。也就是说,它总是会运行。

下面写个小例子描述下具体实现步骤:

1在res下建立xml文件夹,并在内建立Preference.xml文件。PreferenceScreen是根节点。

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

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

android:title="@string/preferences" >

<PreferenceScreen

android:key="version"

android:title="@string/about" >

</PreferenceScreen>

<PreferenceScreen

android:key="general"

android:title="@string/settings" >

<CheckBoxPreference

android:key="auto_start"

android:title="@string/auto_start"/>

<CheckBoxPreference

android:key="keep_screen_on"

android:summary="@string/keep_screen_on_summary"

android:title="@string/keep_screen_on" />

<CheckBoxPreference

android:key="general_show_icon_in_status_bar"

android:title="@string/show_icon_in_status_bar" />

<PreferenceScreen

android:key="font"

android:title="@string/fonts" >

</PreferenceScreen>

<ListPreference

android:key="start_display"

android:title="@string/start_display"

android:summary="Select an option"

android:entries="@array/start_display"

android:entryValues="@array/start_display_entries"

android:dialogTitle="@string/start_display_title"/>

</PreferenceScreen>

</PreferenceScreen>

2在src下建立java文件Preference.java并继承PreferenceActivity。部分结构代码:

publicvoid onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

addPreferencesFromResource(R.xml.preferences);

fonts = (PreferenceScreen) findPreference("font");

startDisplay=(PreferenceScreen)findPreference("start_display");

setFilePath = (PreferenceScreen) findPreference("SetFilePath");

setVolume =(PreferenceScreen) findPreference("SetVolume");

}

3Preference.java中写事件。可以用Preference的内置控件,也可以在PreferenceScreen中写单击事件。

publicboolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,

Preference preference) {

if (preference == version) { // 版本号

DialogAdapter dialogadapter = new DialogAdapter(this);

dialogadapter.showTipsDialog();

} elseif (preference == autoStart) { // 开机自启动事件

editor.putBoolean(AUTO_START_STATUS, autoStart.isChecked());

editor.commit();

} elseif (preference == keepScreenOn) { // 保持屏幕

editor.putBoolean(KEEP_SCREEN_ON, keepScreenOn.isChecked());

editor.commit();

if (keepScreenOn.isChecked()){

AlarmAlertWakeLock.acquireScreenWakeLock(this);

} else {

AlarmAlertWakeLock.release();

}

}

returnsuper.onPreferenceTreeClick(preferenceScreen, preference);

}

看效果:

疑问

在用listPreference中点击listPreference就开始把上次设置的数据保存在sharePreference中,然而在弹出Listdialog选择时却不会保存,不知道为什么?都最后只能放弃listPreference,自己写事件获得数据。请高人指点!

分享到:
评论

相关推荐

    Android代码-Material Design风格Preference UI

    Based on support-preference from Android Support Library, adding a lot of exciting features. Sample How to use add dependencies // replace with version above implementation 'moe.shizuku.preference...

    Pro Android学习:Preference(首选项)小例子

    在Android应用开发中,Preference是用户界面中一种重要的组件,用于提供设置界面,让用户能够配置应用的各种参数。Preference通常用于创建具有开关、选择框、输入框等交互元素的设置页面,使得用户可以方便地更改...

    android支持包:android-support-v4

    **Android支持库:Android Support V4** Android Support Library V4,简称`android-support-v4`,是Android开发者广泛使用的库,旨在提供对Android早期版本的兼容性,同时包含许多先进的特性,使得应用能够运行在...

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

    在Android开发中,Preference是一个非常实用的组件,它用于管理用户的设置和偏好数据。当用户在应用中进行了一些选择,比如开关按钮的状态、铃声的选择等,这些设置通常需要被持久化存储,以便在下次打开应用时能够...

    android Preference自定义样式

    在Android开发中,Preference是用来构建设置界面的一种组件,它提供了用户可以交互的选项,如开关、选择列表等。为了提供个性化的用户体验,开发者有时需要对Preference进行自定义样式。本篇将深入探讨如何在Android...

    Android中Preference的使用以及监听事件分析

    在Android开发中,Preference是构建用户界面的一种重要方式,它主要用于创建设置界面,提供开关、选择列表、输入框等常用控件。Preference类是Android框架的一部分,它简化了UI元素的创建和管理,使得开发者可以方便...

    Android-Support-Preference-V7-Fix-master.zip

    在 Android 开发中,`android.support.v7` 是一个广泛使用的库,它包含了多个组件,如 AppCompatActivity、RecyclerView、CardView 和 Palette 等,以及我们这里关注的 `Preference-V7`。Preference-V7 提供了一套...

    Pro Android学习:Preference(首选项)小例子 修改例子7

    恺风2013-12-04上传的Pro Android学习系列中preference部分的例子源代码; 测试第7个例子,大屏的盒子不能使用,做了一些修改,特此分享; 由于原作者有使用资源分,如果我免费的话会影响他的下载,所以我也加1分,...

    安卓Android源码——Preference_Demo.rar

    Preference_Demo是一个基于Android平台的源码示例,主要展示了如何在Android应用中使用Preference组件。Preference类是Android SDK提供的一种用于创建用户设置界面的工具,它允许开发者以一种声明式的方式定义设置项...

    Android应用源码之Preference_Demo-IT计算机-毕业设计.zip

    在Android应用开发中,Preference是实现用户界面(UI)中设置和首选项管理的重要组件。本项目"Android应用源码之Preference_Demo"是一个毕业设计示例,它深入展示了如何在Android应用程序中创建和管理用户偏好设置。...

    Android中preference的使用实例代码

    在Android开发中,Preference是用来构建用户设置界面的关键组件。它允许开发者轻松地创建具有开关、选择器、输入框等交互元素的配置界面。本篇文章将深入探讨如何在Android项目中使用Preference,通过实例代码来展示...

    Android Preference Framework源码

    Android的Preference Framework是Android系统中用于构建设置界面的一个强大工具,它允许开发者通过XML定义各种偏好设置元素,如开关按钮、选择列表等,然后在应用中轻松地将这些设置集成到用户界面。这个框架大大...

    Android Preference解读

    在Android开发中,Preference是用于构建用户界面的一种重要组件,特别是在设置界面的实现上。它提供了许多预定义的UI元素,如开关按钮、选择列表、输入框等,使得开发者能够快速构建具有交互性的配置界面。本篇文章...

    Android 自定义preference组件

    上篇博文代码实现了Android自带的preference组件,本文将通过实例讲解自定义preference组件。 主要通过以下几步来实现: 1.定义需要的layout布局res-&gt;layout-&gt;xml文件; 2.通过继承Preference类,来实现自定义...

    Android布局——Preference自定义layout的方法

    导语:PreferenceActivity是一个方便设置管理的界面,但是对于界面显示来说比较单调,所以自定义布局就很有必要了。本文举例说明在Preference中自定义layout的方法。笔者是为了在设置中插入@有米v4广告条才研究了一...

    Android代码-MaterialDesign风格的Preference页面

    Material Preference Library uses com.android.support:preference-v7:x.x.x support library widgets. Also it includes a color chooser dialog widget, that can be used to select accent color . Header is ...

    Android学习笔记 Preference的使用

    在Android开发中,Preference是用于实现用户设置界面的关键组件,它允许用户进行简单的交互,如开关按钮、选择列表等。Preference框架提供了丰富的UI元素,并且能够轻松地将用户配置保存到共享偏好设置...

    android-support-v17-leanback.jar.zip

    在Android应用开发中,为了保证应用程序的兼容性和性能优化,Google推出了Android Support Library系列,其中v17的Leanback库是专为大屏幕设备,如智能电视、Android TV等设计的。本文将深入探讨Android Support ...

    android Preference的Demo

    在Android开发中,Preference是用于构建用户界面的一种关键组件,特别是在创建设置屏幕时。`android Preference` 是一个框架,允许开发者轻松地创建可交互的设置项,如开关、选择框、输入框等,并能将用户的设定保存...

Global site tag (gtag.js) - Google Analytics