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

相关文章

Python中构建终端应用界面利器Blessed模块的使用

《Python中构建终端应用界面利器Blessed模块的使用》Blessed库作为一个轻量级且功能强大的解决方案,开始在开发者中赢得口碑,今天,我们就一起来探索一下它是如何让终端UI开发变得轻松而高... 目录一、安装与配置:简单、快速、无障碍二、基本功能:从彩色文本到动态交互1. 显示基本内容2. 创建链

Linux中chmod权限设置方式

《Linux中chmod权限设置方式》本文介绍了Linux系统中文件和目录权限的设置方法,包括chmod、chown和chgrp命令的使用,以及权限模式和符号模式的详细说明,通过这些命令,用户可以灵活... 目录设置基本权限命令:chmod1、权限介绍2、chmod命令常见用法和示例3、文件权限详解4、ch

Android数据库Room的实际使用过程总结

《Android数据库Room的实际使用过程总结》这篇文章主要给大家介绍了关于Android数据库Room的实际使用过程,详细介绍了如何创建实体类、数据访问对象(DAO)和数据库抽象类,需要的朋友可以... 目录前言一、Room的基本使用1.项目配置2.创建实体类(Entity)3.创建数据访问对象(DAO

SpringBoot项目引入token设置方式

《SpringBoot项目引入token设置方式》本文详细介绍了JWT(JSONWebToken)的基本概念、结构、应用场景以及工作原理,通过动手实践,展示了如何在SpringBoot项目中实现JWT... 目录一. 先了解熟悉JWT(jsON Web Token)1. JSON Web Token是什么鬼

使用Spring Cache时设置缓存键的注意事项详解

《使用SpringCache时设置缓存键的注意事项详解》在现代的Web应用中,缓存是提高系统性能和响应速度的重要手段之一,Spring框架提供了强大的缓存支持,通过​​@Cacheable​​、​​... 目录引言1. 缓存键的基本概念2. 默认缓存键生成器3. 自定义缓存键3.1 使用​​@Cacheab

java如何调用kettle设置变量和参数

《java如何调用kettle设置变量和参数》文章简要介绍了如何在Java中调用Kettle,并重点讨论了变量和参数的区别,以及在Java代码中如何正确设置和使用这些变量,避免覆盖Kettle中已设置... 目录Java调用kettle设置变量和参数java代码中变量会覆盖kettle里面设置的变量总结ja

Android WebView的加载超时处理方案

《AndroidWebView的加载超时处理方案》在Android开发中,WebView是一个常用的组件,用于在应用中嵌入网页,然而,当网络状况不佳或页面加载过慢时,用户可能会遇到加载超时的问题,本... 目录引言一、WebView加载超时的原因二、加载超时处理方案1. 使用Handler和Timer进行超

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

android-opencv-jni

//------------------start opencv--------------------@Override public void onResume(){ super.onResume(); //通过OpenCV引擎服务加载并初始化OpenCV类库,所谓OpenCV引擎服务即是 //OpenCV_2.4.3.2_Manager_2.4_*.apk程序包,存