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

相关文章

PostgreSQL 默认隔离级别的设置

《PostgreSQL默认隔离级别的设置》PostgreSQL的默认事务隔离级别是读已提交,这是其事务处理系统的基础行为模式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一 默认隔离级别概述1.1 默认设置1.2 各版本一致性二 读已提交的特性2.1 行为特征2.2

一文详解MySQL如何设置自动备份任务

《一文详解MySQL如何设置自动备份任务》设置自动备份任务可以确保你的数据库定期备份,防止数据丢失,下面我们就来详细介绍一下如何使用Bash脚本和Cron任务在Linux系统上设置MySQL数据库的自... 目录1. 编写备份脚本1.1 创建并编辑备份脚本1.2 给予脚本执行权限2. 设置 Cron 任务2

mtu设置多少网速最快? 路由器MTU设置最佳网速的技巧

《mtu设置多少网速最快?路由器MTU设置最佳网速的技巧》mtu设置多少网速最快?想要通过设置路由器mtu获得最佳网速,该怎么设置呢?下面我们就来看看路由器MTU设置最佳网速的技巧... 答:1500 MTU值指的是在网络传输中数据包的最大值,合理的设置MTU 值可以让网络更快!mtu设置可以优化不同的网

MySQL 设置AUTO_INCREMENT 无效的问题解决

《MySQL设置AUTO_INCREMENT无效的问题解决》本文主要介绍了MySQL设置AUTO_INCREMENT无效的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录快速设置mysql的auto_increment参数一、修改 AUTO_INCREMENT 的值。

详解Linux中常见环境变量的特点与设置

《详解Linux中常见环境变量的特点与设置》环境变量是操作系统和用户设置的一些动态键值对,为运行的程序提供配置信息,理解环境变量对于系统管理、软件开发都很重要,下面小编就为大家详细介绍一下吧... 目录前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变

安装centos8设置基础软件仓库时出错的解决方案

《安装centos8设置基础软件仓库时出错的解决方案》:本文主要介绍安装centos8设置基础软件仓库时出错的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录安装Centos8设置基础软件仓库时出错版本 8版本 8.2.200android4版本 javas

Ubuntu设置程序开机自启动的操作步骤

《Ubuntu设置程序开机自启动的操作步骤》在部署程序到边缘端时,我们总希望可以通电即启动我们写好的程序,本篇博客用以记录如何在ubuntu开机执行某条命令或者某个可执行程序,需要的朋友可以参考下... 目录1、概述2、图形界面设置3、设置为Systemd服务1、概述测试环境:Ubuntu22.04 带图

VSCode设置python SDK路径的实现步骤

《VSCode设置pythonSDK路径的实现步骤》本文主要介绍了VSCode设置pythonSDK路径的实现步骤,包括命令面板切换、settings.json配置、环境变量及虚拟环境处理,具有一定... 目录一、通过命令面板快速切换(推荐方法)二、通过 settings.json 配置(项目级/全局)三、

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

VS配置好Qt环境之后但无法打开ui界面的问题解决

《VS配置好Qt环境之后但无法打开ui界面的问题解决》本文主要介绍了VS配置好Qt环境之后但无法打开ui界面的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目UKeLvb录找到Qt安装目录中designer.UKeLvBexe的路径找到vs中的解决方案资源