`
haliluya4
  • 浏览: 123655 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

利用PreferenceActivity简化首选项的设计

阅读更多

目前Android手机上的应用,大部分都带有设置功能,即在里面选择一些本应用的自定义设置,便于用户的定制化。
但如果自己写一个Activity来实现,未免过于复杂,而且浪费时间。
Android框架已经为我们提供了一个简单的方式来实现设置页面,即使用PreferenceActivity。
首先,在res/xml下新建一个preference.xml文件,用于定义首选项页面的布局。

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <PreferenceCategory android:title="PreferenceCategory 1">
        <CheckBoxPreference
            android:key="CheckBox1"
            android:title="CheckBox"
            android:summaryOn="某功能: 开启"
            android:summaryOff="某功能: 关闭"
            android:defaultValue="true"
        />
    </PreferenceCategory>
    <PreferenceCategory android:title="PreferenceCategory 3">
    <ListPreference
        android:key="ListPreference"
        android:title="ListPreference"
        android:summary="ListPreference测试"
        android:dialogTitle="ListPreference"
        android:entries="@array/entries_list_preference"
        android:entryValues="@array/entriesvalue_list_preference"
    />
    <EditTextPreference
        android:key="EditTextPreference"
        android:title="EditTextPreference"
        android:summary="点击输入"
        android:dialogTitle="输入设置"
    />
    <RingtonePreference
        android:key="RingtonePreference"
        android:title="RingtonePreference"
        android:summary="选择铃声"
    />
    </PreferenceCategory>
</PreferenceScreen>

 
通用属性:
 title:第一张图中的”删除旧信息”、”短信设置”
 key:用于检索该首选项,可以在代码中利用PreferenceManager.getDefaultSharedPreferences(context).getXXX(key,valueNotExist)方法获得该首选项的值。也可以利用PreferenceActivity的getPreference(key)获取该Preference对象,进而设置相应的值。
 defaultValue:默认值,当继承了PreferenceActivity的页面打开时,通常会在onCreate中调用addPreferencesFromResource方法加载首选项。此时,若设置了defaultValue,且之前未设置过该项的值,系统会自动将其设为defaultValue,并写入该应用的首选项文件中。这样,若要实现一键恢复默认值,只要调用addPreferencesFromResource即可。
 summary:第一张图中”达到数量上限时删除旧信息”
 dependency:其余Preference的key(通常为某个CheckBoxPreference的),若设置了该项,当依赖项选中时才可以设置本项。
 persistent:为true时,系统会帮助我们去保存该设置。默认为true。
标签:
PreferenceScreen:设置页面,可嵌套形成二级设置页面,用Title参数设置标题。目前没怎么用过,以后用到再补充。
PreferenceCategory是一个首选项组,通常把一类的设置项用一个PreferenceCategory包起来。如下图中的存储设置所示。


 
CheckBoxPreference就是选择框,只有两种值,true或false,可用Title参数设置标题,用summaryOn和summaryOff参数来设置控件选中和未选中时的提示。
ListPreference:下拉框选择控件,用Title参数设置标题,用Summary参数设置说明,点击后出现下拉框,效果如下图所示。用dialogTitle设置下拉框的标题,下拉框内显示的内容和具体的值需要在res/values/array.xml(可以是自定义的文件,建议单独建一个来存储字符串数组)中设置两个array来表示,在preference.xml中用android:entries指定显示内容的id,android:entryValues指定相应内容的值的id。如下图所示。

 

<string-array name="entries_list_preference">
    <item>始终</item>
    <item>仅在静音时</item>
    <item>一律不</item>
</string-array>
<string-array name="entriesvalue_list_preference">
    <item>1</item>
    <item>2</item>
    <item>3</item>
</string-array>

 
注:当你的应用要支持多语言时,建议将entryValues对应的数组中的值用数字表示,这样就可以很好的避免翻译时不小心把值也给改了,造成不同语言切换时,丢失之前的设置(比如说在中文对应的文件里,用值_始终表示,而在英文文件中却是value_always。这样当从中文切换到英文时,因为之前在preference文件中存的是值_始终,在英文情况下,系统无法找到值_始终对应的显示内容,就会造成打开该ListPreference时没有选项被选中)。


 
RingtonePreference:铃声选择框,点击后可选择系统铃声。Title参数设置标题,Summary参数设置说明,dialogTitle参数设置铃声选择框的标题。
EditTextPreference:输入框控件,点击后可输入字符串设置。用Title参数设置标题,Summary参数设置说明,dialogTitle参数设置输入框的标题。
以上这几种Preference,当你对其中的值修改后,系统都会自动将其存入data\data\你的包名\shared_prefs\ 下的preferences文件中(具体起名规则目前还没搞懂,不过一看就知道是哪个文件)。然后每次PreferenceActivity启动时,都会通过addPreferencesFromResource来加载。如果没有对应的值,则设为默认值。如果没有默认值,则不设置。
当然,很多情况下,以上提供的几种往往不能满足我们的需求,这就需要对首选项进行自定义。可以自己实现一个继承自Preference的类,也可以使用默认的Preference,然后对它的点击进行一些处理,如弹出自定义对话框,转到自定义的Activity等等。

建好了preference.xml,就可以新建一个类,继承PreferenceActivity。
在onCreate中可以加一些自定义Preference的初始化代码,调用addPreferencesFromResource来加载preference.xml文件。
在onPreferenceTreeClick中判断点击的是哪个Preference。并进行一些自定义的操作,如弹出自定义的窗口。最后记得调用super. onPreferenceTreeClick。

public class MyPreferenceActivity extends PreferenceActivity{
    /** Called when the activity is first created. */
	CheckBoxPreference checkbox;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.preference);
        checkbox=(CheckBoxPreference) findPreference("CheckBox1");
    }

	@Override
	public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,
			Preference preference) {
		if(preference==checkbox)
			//做一些自定义的事
			;
		return super.onPreferenceTreeClick(preferenceScreen, preference);
	}
}

 

 

 

  • 大小: 15.3 KB
  • 大小: 13.2 KB
  • 大小: 9.4 KB
  • 大小: 36.6 KB
分享到:
评论

相关推荐

    PreferenceActivity简介

    通过使用PreferenceActivity,开发者可以方便地创建出具有标准Android风格的设置界面,而无需手动设计布局。它将XML定义的偏好项与Activity中的代码逻辑关联起来,使得UI元素的操作变得简单易行。 要使用...

    PreferenceActivity

    使用 PreferenceActivity设置个性信息, 参考:android 设置类PreferenceActivity http://blog.csdn.net/xiaobijia/article/details/41479235

    PreferenceActivity用法简介Android X

    PreferenceActivity用法简介 Android X

    Android软件开发之PreferenceActivity中组件的使用

    在Android应用开发中,PreferenceActivity是用于创建设置界面的一个特殊Activity。它允许开发者以XML方式定义用户界面元素,...通过熟练掌握这些组件,你可以轻松创建出符合Android设计规范且用户体验良好的设置页面。

    Android 属性页PreferenceActivity的实现

    它使得开发者可以轻松地构建具有各种设置选项的界面,如开关、单选按钮、复选框等,而无需从头编写大量的XML和Java代码。本文将深入探讨`PreferenceActivity`的实现及其相关知识点。 首先,`PreferenceActivity`是...

    继承PreferenceActivity

    标题中的“继承PreferenceActivity”指的是在Android开发中,利用`PreferenceActivity`类来构建设置界面。`PreferenceActivity`是Android SDK提供的一种特殊类型的Activity,它主要用于创建和展示一系列的偏好设置,...

    自定义PreferenceActivity

    然而,标准的`PreferenceActivity`样式可能无法满足所有设计需求,因此开发者有时需要自定义`PreferenceActivity`来实现特定的UI效果。 自定义`PreferenceActivity`主要包括以下几个方面: 1. **布局文件定制**: ...

    仿IOS的PreferenceActivity界面

    总之,"仿IOS的PreferenceActivity界面"是一个结合了Android原生组件和UI设计技巧的实践案例,旨在为用户提供接近iOS体验的设置界面。通过深入理解并应用上述知识点,开发者可以创建出美观且易用的设置界面。

    PreferenceActivity 类的使用,它可以保存设置

    总结一下,PreferenceActivity是Android中处理设置界面的重要工具,它通过XML定义偏好设置,自动保存用户的选择,并提供了丰富的自定义选项。理解并熟练掌握PreferenceActivity的使用,对于构建用户友好的设置界面至...

    android PreferenceActivity中的组件源码

    android PreferenceActivity中的组件源码~

    自定义PreferenceActivity的样式和界面

    然而,系统默认的PreferenceActivity样式可能无法满足所有设计需求,这时我们就需要自定义它的样式和界面,以提供更符合应用特色的用户体验。 首先,我们来了解如何自定义PreferenceActivity的布局。默认情况下,...

    Android PreferenceActivity

    8. **Material Design兼容**:随着Android版本的更新,`PreferenceActivity`也逐渐与Material Design设计语言兼容。现在,你可以使用`PreferenceFragmentCompat`来替代`PreferenceActivity`,以获得更好的视觉效果和...

    Android之PreferenceActivity简介

    ### Android之PreferenceActivity详解 #### 一、PreferenceActivity概述 **PreferenceActivity** 是Android系统提供的一种专门...此外,合理利用SharedPreferences进行数据持久化存储也是构建高质量应用的关键之一。

    android中PreferenceActivity详解

    标题与描述均提及了《Android中PreferenceActivity详解》,这一主题涉及了Android开发中关于用户偏好设置的核心组件——PreferenceActivity的深入解析。以下是基于标题、描述、标签以及部分内容的关键知识点总结,...

    Android PreferenceActivity 使用练习

    它允许开发者通过XML定义UI元素,如开关、单选按钮、复选框等,并在活动中动态加载这些元素,简化了构建用户设置界面的过程。本篇文章将深入探讨PreferenceActivity的使用方法以及相关知识点。 首先,我们了解`...

    PreferenceActivity UI 优化修改

    PreferenceActivity是Android系统中用于构建设置界面的一种特殊Activity,它简化了创建具有各种开关、选择器和输入字段的设置布局的过程。这篇博文可能是关于如何优化PreferenceActivity的UI,以提高用户体验和性能...

    Android PreferenceActivity 学习笔记

    首先,PreferenceActivity是Android SDK提供的一种特殊类型的Activity,它允许开发者快速构建具有可配置选项的界面,类似于系统设置应用中的各种设置页面。通过使用PreferenceScreen和各种Preference子类(如...

Global site tag (gtag.js) - Google Analytics