Preference

概述

在Android中,一个App肯定是少不了设置。应用通常包括允许用户修改应用特性和行为的设置。例如,有些应用允许用户指定是否启用通知,或指定应用与云端同步数据的频率。Google官方介绍的是使用Android Preference API去构建一致的设置界面,以给用户更好的体验。能力有限,总给了一些自己学习经验,不喜勿喷哦! kensoon918@163.com only for feedback.
概览:

Preference

创建 xml

您必须将 XML 文件保存在res/xml/ 目录中。尽管您可以随意命名该文件,但它通常命名为 preferences.xml。您通常只需一个文件,因为层次结构中的分支(可打开各自的设置列表)是使用 PreferenceScreen 的嵌套实例声明的。

编写 xml

设置是使用您在 XML 文件中声明的Preference 类的各种子类构建而成,而不是使用 View 对象构建用户界面。Preference 对象是单个设置的构建基块。每个 Preference 均作为项目显示在列表中,并提供适当的 UI 供用户修改设置。例如,CheckBoxPreference 可创建一个列表项用于显示复选框,ListPreference可创建一个项目用于打开包含选择列表的对话框。Preference的子类有:
CheckBoxPreference
EditTextPreference
ListPreference
PreferenceCategory
RingtonePreference

XML 文件的根节点必须是一个 <PreferenceScreen> 元素。您可以在此元素内添加每个 Preference。在<PreferenceScreen> 元素内添加的每个子项均将作为单独的项目显示在设置列表中。

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <CheckBoxPreference
        android:key="pref_sync"
        android:title="@string/pref_sync"
        android:summary="@string/pref_sync_summ"
        android:defaultValue="true" />
    <ListPreference
        android:dependency="pref_sync"
        android:key="pref_syncConnectionType"
        android:title="@string/pref_syncConnectionType"
        android:dialogTitle="@string/pref_syncConnectionType"
        android:entries="@array/pref_syncConnectionTypes_entries"
        android:entryValues="@array/pref_syncConnectionTypes_values"
        android:defaultValue="@string/pref_syncConnectionTypes_default" />
</PreferenceScreen>

android:key
对于要保留数据值的首选项,必须拥有此属性。它指定系统在将此设置的值保存在 SharedPreferences 中时所用的唯一键(字符串)。
不需要此属性的仅有情形是:首选项是 PreferenceCategory 或PreferenceScreen,或者首选项指定要调用的 Intent(使用 元素)或要显示的 Fragment(使用 android:fragment 属性)。

android:title
此属性为设置提供用户可见的名称。

android:defaultValue
此属性指定系统应该在 SharedPreferences 文件中设置的初始值。您应该为所有设置提供默认值。

创建Activity

要在 Activity 中显示您的设置,需要扩展 PreferenceActivity 类。这是传统 Activity 类的扩展,该类根据 Preference 对象的层次结构显示设置列表。当用户进行更改时,PreferenceActivity 会自动保留与每个Preference相关的设置。

如果您是开发针对 Android 3.0(API 级别 11)及更高版本系统的应用,则应使用 PreferenceFragment 显示 Preference对象的列表。您可以将 PreferenceFragment 添加到任何 Activity,而不必使用 PreferenceActivity。与仅使用上述 Activity 相比,无论您在构建何种 Activity,片段都可为应用提供一个更加灵活的体系结构。

因此,建议您尽可能使用 PreferenceFragment 控制设置的显示,而不是使用 PreferenceActivity。下面以PreferenceFragment为例:

PreferenceFragment 的实现就像定义 onCreate() 方法以使用 addPreferencesFromResource() 加载首选项文件一样简单。例如:

public static class SettingsFragment extends PreferenceFragment {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Load the preferences from an XML resource
        addPreferencesFromResource(R.xml.preferences);
    }
    ...
}

然后,正如您对其他任何 Fragment 的处理一样,您可以将此片段添加到 Activity。例如:

public class SettingsActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Display the fragment as the main content.
        getFragmentManager().beginTransaction()
                .replace(android.R.id.content, new SettingsFragment())
                .commit();
    }
}

最后,就可以通过相应的Intnet 启动这个Activity 了。

总结

Preference 是很常用的,当你创建一个App的时候。

时间: 2025-01-01 02:10:55

Preference的相关文章

编写自定义的 Android Preference 组件

  Android SDK 提供好几个 Preference 组件,例如 CheckBoxPreference.EditTextPreference.DialogPreference.ListPreference 等,这些组件是跟 Android 提供的 Preference 存储机制绑定的,你可以通过这些组件来修改应用的一些配置,如下图所示,这是 Android 自带的系统设置界面:   但这些组件毕竟还不能满足100%的要求,假设我们需要为应用程序提供一个选择不同图片做为应用背景图的设置,我

关于AP聚类聚不出来的preference设置问题

问题描述 关于AP聚类聚不出来的preference设置问题 我现在在做AP聚类,结果跑出来的程序没有结果,然后想问一下,我现在的preference设置的是中位数,是不是应该改小?用最小值?

Android中的Shared Preference (分享首选项) 详解

Shared Preference将一组原始数据的NVP(name-value pair)存储为命名首选项(named preference). 创建SharedPreferences类使用getSharedPreferences(), 并传入要SharedPreferences的名称; 修改SharedPreferences类使用SharedPreferences.Editor类, 通过调用SharedPreferences类的edit()方法, 获取对象; 使用SharedPreferenc

Android ApiDemos示例解析(32):App-&amp;gt;Preferences-&amp;gt;Preference dependencies

Preferences之间可以定义依赖关系,在第一个例子中已有说明.对应定义了依赖关系的Preferences,依赖指向的 Preference可以称为Parent preference ,只有在Parent preference选中时,子Preference 才可以配置,否则子Preference 被Disabled,显示为灰色. 这个例子对应的Preferences定义如下: <PreferenceScreen xmlns:android=" http://schemas.androi

android 更新Preference的UI显示

当我们在编辑完一个preference的sub Preference的数据设置后,在sub里面修改outPrefs后,返回后发现out Prefs并没有改变.如何实时更新嗯? PreferenceScreen usersListScreen = ... userScreenListAdapter = (BaseAdapter)usersListScreen.getRootAdapter(); 然后可以用 userScreenListAdapter.notifyDataSetChanged();

Android端用户的密码保存在preference 安全吗

问题描述 Android端用户的密码保存在preference 安全吗 解决方案 用户名密码,存在本地的话怎么都行.这个看个人爱好,重要的是帐号的安全性.注册的时候检查帐号是否存在,这个东西应该是通过api与服务进行通信.解决方案二:> forum.php?mod=redirect&goto=findpost&pid=2414&ptid=1051用户名密码,存在本地的话怎么都行.这个看个人爱好,重要的是帐号的安全性.注册的时候检查帐号是否存在 ...存在本地的话,手机丢失,那

android-把Bundle object保存到shared preference中

问题描述 把Bundle object保存到shared preference中 程序中有2个Activity Activity1 Activity2 Activity1: Intent intent= new Intent(Activity1.this,Acivity2.class); Bundle b=new Bundle(); b.putParcelableArrayList("actionArray", (ArrayList<? extends Parcelable>

Android 隐藏(删除) Preference 小结

隐藏 Preference 有两种方法: 一.先在xml布局里面删,然后在java里面删掉调用的相关部分,但如果很多地方都有调用,那么删除就很麻烦: 二.用removePreference(Preference preference) 方法 删除://推荐方法   实例: testpreference.xml 代码: <?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:and

Preference 也是可以响应Click事件的

 大家都知道 PreferenceScreen  我们通常用来配置一些 配置信息 然后配置好之后 应用程序有一些变化, 前几天 遇到 一个 需求  在要设置 里边 展示一些信息 然后 一点击就打开浏览器,展示信息  当然是用 PreferenceScreen.  但是 一点击 就打开浏览器  就需要OnClick事件了 发个 Intent,如下图,那并不是一个 ListView 是一个 PreferenceScreen findPreference("pref_learn_more")