Preference

简介: 在Android中,一个App肯定是少不了设置。应用通常包括允许用户修改应用特性和行为的设置。例如,有些应用允许用户指定是否启用通知,或指定应用与云端同步数据的频率。能力有限,总给了一些自己学习经验,不喜勿喷哦! kensoon918@163.com only for feedback.

概述

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

settings

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的时候。

目录
相关文章
|
3月前
|
Shell API Android开发
android queries属性
android queries属性
286 2
|
7天前
|
开发工具 Android开发
解决Manifest merger failed : android:exported needs to be explicitly specified for <activity>
解决Manifest merger failed : android:exported needs to be explicitly specified for <activity>
17 1
|
3月前
|
缓存 安全 Java
Android中的persistent属性
Android中的persistent属性
53 2
|
Android开发
Android GridLayoutManager.setSpanSizeLookup的使用介绍
Android GridLayoutManager.setSpanSizeLookup的使用介绍
115 0
|
Java 数据处理 开发者
Preference组件探究之自定义Preference
Preference组件探究之自定义Preference
Preference组件探究之自定义Preference
No adapter attached; skipping layout 原因、解决办法
No adapter attached; skipping layout 原因、解决办法
1011 0
|
Android开发
DSL element ‘android.dataBinding.enabled‘ is obsolete and has been replaced with ‘android.buildFeatu
DSL element ‘android.dataBinding.enabled‘ is obsolete and has been replaced with ‘android.buildFeatu
190 0
|
Android开发
【错误记录】Android 应用中启动 FlutterActivity 报错 ( have you declared this activity in your AndroidManifest )
【错误记录】Android 应用中启动 FlutterActivity 报错 ( have you declared this activity in your AndroidManifest )
548 0
【错误记录】Android 应用中启动 FlutterActivity 报错 ( have you declared this activity in your AndroidManifest )
|
Android开发
【错误记录】Android Studio 编译报错 ( AppCompat does not support the current theme features )
【错误记录】Android Studio 编译报错 ( AppCompat does not support the current theme features )
282 0
【错误记录】Android Studio 编译报错 ( AppCompat does not support the current theme features )