Android设置界面之Preference

2024-02-05 03:48

本文主要是介绍Android设置界面之Preference,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

转载自简书:http://www.jianshu.com/p/6d6f84e2f50d

Android系统为设置界面的UI提供了一系列的接口,设置界面的部分和Activity是分离的,会有一个PreferenceScreen的对象
是根目录,在其中会包含CheckBoxPreference EditTextPreference ListPreference PreferenceCategory RingtonePreference

  • 相关的接口

    Preference.OnPreferenceChangeListener
    Preference.OnPreferenceClickListener
    PreferenceFragment.OnPreferenceStartFragmentCallback
    PreferenceManager.OnActivityDestroyListener
    PreferenceManager.OnActivityResultListener
    PreferenceManager.OnActivityStopListener
  • 相关的类

    CheckBoxPreference
    DialogPreference
    EditTextPreference
    ListPreference
    MultiSelectListPreference
    Preference
    Preference.BaseSavedState
    PreferenceActivity
    PreferenceActivity.Header
    PreferenceCategory
    PreferenceFragment
    PreferenceGroup
    PreferenceManager
    PreferenceScreen
    RingtonePreference
    SwitchPreference
    TwoStatePreference
概述

由于设置的界面是使用Preference而不是View来创建的,需要特殊的Activity或者Fragment的子类来显示

  • 版本低于Android 3.0(API 10),请使用PreferenceActivity
  • 版本高于Android 3.0(API 10),可以在普通的Activity中使用PreferenceFragment来显示,也可以使用PreferenceActivity
在XML中定义Preference

可以在运行时创建Preference也可以通过在xml中定义Preference,每一个Preference的子类都可以用XML中的元素来定义,在 res/xml/
文件夹中创建一个文件如preference.xml

如果想定义分屏的设置布局,需要分别定义XML

preference.xml一般的布局如下:

  <?xml version="1.0" encoding="utf-8"?><PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"><CheckBoxPreferenceandroid:key="pref_sync"android:title="@string/pref_sync"android:summary="@string/pref_sync_summ"android:defaultValue="true" /><ListPreferenceandroid: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>
创建PreferenceActivity
  • 定义xml文件

    res/xml/文件夹中定义 preference.xml

    <?xml version="1.0" encoding="utf-8"?>
    <PreferenceScreenxmlns:android="http://schemas.android.com/apk/res/android"><PreferenceCategoryandroid:title="@string/inline_preferences"><CheckBoxPreferenceandroid:key="check_box_pref"android:title="@string/title_checkbox_preference"android:summary="@string/summary_checkbox_preference">.....</CheckBoxPreference></PreferenceCategory>
    </PreferenceScreen>
  • Activity继承PreferenceActivity

    public class SettingsActivity1 extends PreferenceActivity{@Override
    protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);addPreferencesFromResource(R.xml.preference); //API 10之后的版本这个方法以及过时,推荐使用Fragment的方式}}
使用Preference Fragments

在高于Android 3.0(API 10)的版本,应该使用PreferenceFragment来显示Preference,就不需要继承PreferenceActivity
继承PreferenceFragmentonCreate()方法中调用addPreferencesFromResource()方法

  public class SettingsFragment extends PreferenceFragment{@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);this.addPreferencesFromResource(R.xml.preference);}}

创建一个Activity,然后将定义的Fragments添加到当前的Activity中,最终呈现的效果和PreferenceActivity是一样的

  public class SettingsActivity2 extends Activity{@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);this.getFragmentManager().beginTransaction().replace(android.R.id.content, new SettingsFragment()).commit();}}
  • 显示新条目

    <PreferenceCategoryandroid:title="@string/dialog_based_preferences">
    <!-- 添加对应的preference 如PreferenceScreen EditTextPreference 等-->
    </PreferenceCategory>
  • list view preference

    <ListPreference
    android:key="list_preference"
    android:title="@string/title_list_preference"
    android:summary="@string/summary_list_preference"
    android:entries="@array/entries_list_preference"
    android:entryValues="@array/entryvalues_list_preference"
    android:dialogTitle="@string/dialog_title_list_preference"/>
  • 输入框

    <EditTextPreferenceandroid:key="edit_preference"android:title="@string/title_edittext_preference"android:summary="@string/summary_edittext_preference"android:dialogTitle="@string/dialog_title_edittext_preference"/>
使用Preference Header
  • 为每一个设置文件单独创建一个PreferenceFragment的实例
  • 创建headers的XML文件,在fragment中设置对应的PreferenceFragment的实例
  • 使用PreferenceActivity
  • 实现obBuildHeaders()方法

    <?xml version="1.0" encoding="utf-8"?>
    <preference-headers
    xmlns:android="http://schemas.android.com/apk/res/android">
    <headerandroid:fragment="com.example.demo.preference$PrefsFragment1"android:title="Pref 1"android:summary="An example of some preferences."></header>
    <headerandroid:fragment="com.example.demo.preference$PrefsFragment2"android:title="Pref 2"android:summary="Another example of some preferences."></header>
    <extra android:name="test" android:value="testvalue" />
    </preference-headers>

    <extras>元素中的内容,可以通过Bundle获得,通过方法getArguments()获取

    显示headers使用PreferenceActivity的回调方法onBuildHeaders()加载preference-headers.xml文件

    @Override
    public void onBuildHeaders(List<Header> target) {super.onBuildHeaders(target);loadHeadersFromResource(R.xml.preference_header, target);
    }
自定义Preference的布局

通过Preference的属性android:layout=""设置自定义的layout文件

这篇关于Android设置界面之Preference的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/679684

相关文章

Java实现为PDF设置背景色和背景图片

《Java实现为PDF设置背景色和背景图片》在日常的文档处理中,PDF格式因其稳定性和跨平台兼容性而广受欢迎,本文将深入探讨如何利用Spire.PDFforJava库,以简洁高效的方式为你的PDF文档... 目录库介绍与安装步骤Java 给 PDF 设置背景颜色Java 给 PDF 设置背景图片总结在日常的

C#中通过Response.Headers设置自定义参数的代码示例

《C#中通过Response.Headers设置自定义参数的代码示例》:本文主要介绍C#中通过Response.Headers设置自定义响应头的方法,涵盖基础添加、安全校验、生产实践及调试技巧,强... 目录一、基础设置方法1. 直接添加自定义头2. 批量设置模式二、高级配置技巧1. 安全校验机制2. 类型

python库pydantic数据验证和设置管理库的用途

《python库pydantic数据验证和设置管理库的用途》pydantic是一个用于数据验证和设置管理的Python库,它主要利用Python类型注解来定义数据模型的结构和验证规则,本文给大家介绍p... 目录主要特点和用途:Field数值验证参数总结pydantic 是一个让你能够 confidentl

Java利用Spire.XLS for Java设置Excel表格边框

《Java利用Spire.XLSforJava设置Excel表格边框》在日常的业务报表和数据处理中,Excel表格的美观性和可读性至关重要,本文将深入探讨如何利用Spire.XLSforJava库... 目录Spire.XLS for Java 简介与安装Maven 依赖配置手动安装 JAR 包核心API介

Android实现图片浏览功能的示例详解(附带源码)

《Android实现图片浏览功能的示例详解(附带源码)》在许多应用中,都需要展示图片并支持用户进行浏览,本文主要为大家介绍了如何通过Android实现图片浏览功能,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

在Android中使用WebView在线查看PDF文件的方法示例

《在Android中使用WebView在线查看PDF文件的方法示例》在Android应用开发中,有时我们需要在客户端展示PDF文件,以便用户可以阅读或交互,:本文主要介绍在Android中使用We... 目录简介:1. WebView组件介绍2. 在androidManifest.XML中添加Interne

Android协程高级用法大全

《Android协程高级用法大全》这篇文章给大家介绍Android协程高级用法大全,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友跟随小编一起学习吧... 目录1️⃣ 协程作用域(CoroutineScope)与生命周期绑定Activity/Fragment 中手

MySQL设置密码复杂度策略的完整步骤(附代码示例)

《MySQL设置密码复杂度策略的完整步骤(附代码示例)》MySQL密码策略还可能包括密码复杂度的检查,如是否要求密码包含大写字母、小写字母、数字和特殊字符等,:本文主要介绍MySQL设置密码复杂度... 目录前言1. 使用 validate_password 插件1.1 启用 validate_passwo

Android 缓存日志Logcat导出与分析最佳实践

《Android缓存日志Logcat导出与分析最佳实践》本文全面介绍AndroidLogcat缓存日志的导出与分析方法,涵盖按进程、缓冲区类型及日志级别过滤,自动化工具使用,常见问题解决方案和最佳实... 目录android 缓存日志(Logcat)导出与分析全攻略为什么要导出缓存日志?按需过滤导出1. 按

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.