android developer API Guider之user interface---Settings(一)

2024-06-20 21:38

本文主要是介绍android developer API Guider之user interface---Settings(一),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文翻译之原文地址,可参照阅读:

http://developer.android.com/guide/topics/ui/settings.html#DefiningPrefs

笔者水平有限,翻译之中难免有错误之处,敬请指出,不甚感激!

本文原文较长,所以会分几篇博文发出,敬请谅解!

设置

        应用通常会包含允许用户修改app特性的设置。例如,一些app允许用户修改是否使能notificatons或者修改应用把数据同步到云端的频率。

        假如你想为你的app提供设置的功能,你需要使用AndroidPreference API去实现一个接口,它使得用户在使用这个app时和使用别的应用(包括系统的设置)感觉起来比较类似。这篇文档就描述了如何使用Preference API去创建你的app设置。

设置的设计

         关于如何设计你的设置,请参阅《设置设计指导》。

概述

        设置使用一系列在XML文件中定义的preference类的子类来实现用户的接口,而不再使用View objects来实现。

        一个Preference object是一个单设置的组成部件。每一个preference都是作为一个item显示在列表中的并且为用户去改变设置提供了对应的UI。比如,一个CheckBoxPreference创建了一个列表item,显示为一个复选框,而一个ListPreference则创建一个item,他会打开一个列表选择的对话框。

        对你的应用设置而言,每一个你加入的Preference都有一个相对应的键值去匹配系统保存在默认sharedPreference文件中的设置。当用户改变这个设置时,系统会刷新保存在SharedPreference文件中的对应的值。只有你需要根据用户的设置来决定你的app的行为时,你才会读取保存在相应sharedPreferences文件中的值。

        为每一个设置保存在SharedPreference中的值应当是以下类型中的一种:

Boolean

Float

Int

Log

String

String Set

        因为你的app是使用Preference objects而不是view objects,你需要使用一个特殊的activity或者fragment子类来显示列表设置:

        假如你的应用支持Android3.0之前的版本(API level 10及之前),你必须build这个activityPreferenceActivity类的扩展。

        在Android3.0及之后,你应当使用一个PreferenceFragment来代替传统的Activity来显示你的app设置。当然,你仍然可以使用PreferenceActivity去创建一个two-pane画布,用于多个设置组的大屏应用中。

如何创建你的preferenceactivitypreferencefragment的实例,请参见《创建一个Preference Activity》和《使用Preference Fragments》。

 

图一,Android短信应用中的设置截图,

选择一个由preference定义的item来打开一个改变设置的接口

Preferences

你的app的每一个设置都是由Preference类的一个特殊的子类来描述的。每一个子类都有一些核心的属性允许你去改变诸如设置的标题,默认值之类的东西。每一个子类也提供它自己特殊的属性和用户的接口。例如,图1就显示了一个短信app设置的截图,每一个列表item都由不同的Preference object来回调。

        一些常用的Preference如下:

CheckBoxPreference

        在设置中显示一个复选框,可以被选中或者不选中。保存的值是一个boolean(选中为true)。

ListPreference

        打开一个有一系列单选按钮的对话框,保存的值可以是任何一个支持的类型(见上文)。

EditTextPreference

        打开一个具有输入功能的小窗口,他保存的值是一个string的类型。

        其它的子类和他们相应的属性请参看Preference类。

当然内建的类并不能满足所有你的需求,你有可能需要一些特殊的类。比如,系统当前并不提供一个Preference类来获得一个数据或者数字。因此你有可能需要定义自己的Preference子类。如何自己定义,请参照《创建一个用户Preference》章节。

XML中定义Preferences

        虽然你可以在运行的时候实例化一个新的Preference objects,但是你仍然应当在一个XML中使用由层次的Preference objects来定义你的设置列表。使用XML文件来定义你的设置结合是一个比较好的方法,因为这个文件看起来比较清晰而且以后升级起来也比较方便。同时,你的应用设置通常是预先决定好了,尽管在运行的时候你仍然可以修改这个集合。

每一个Preference子类都是能够由XML文件中和类名字匹配的元素来声明,比较<CheckBoxPreference>.

你应当把XML文件保存在res/xml目录下面。尽管你可以把这个文件命名为任何一个你想要的名字,它通常会被命名为preferences.xml。你通常只需要一个文件,因为在层次中的分支都似乎有内嵌的preferenceScren的实例来声明的。

注意:假如你想要创建multi-pane layout,你需要为每一个fragment使用单独的XML文件。

XML文件的根节点应当是<PreferenceScreen>元素,这个元素里面就是你自己添加的Preference。其中你添加的每一个元素都会在设置列表中显示为一个单独的item

例子:

<?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>


 

在这个例子中,包含了一个CheckBoxPreference和一个ListPreference。这两个item都包含以下三个属性:

android:key

      这个参数在preference中是用来保存一个数据值的。他指定了系统保存设置值到SharedPreferences中所使用的特定的值。

    只有在PreferenceCategoryPreferenceScreen中,这个值才不是强制要求的。当然若是这个preference指定了一个Intent去回调(就是有<intent>元素)或者一个Fragment去显示(有android:fragment属性),他也是不需要的。

android:title

        这个是用户可见的设置的标题。

android:defaultValue

        这个指定了系统保存到SharedPreferences中的初始值,你应当为所有的设置指定一个初始值。

        关于别的支持的属性,请参照Preference文档。

        当你的设置列表超过了10items,你也许需要为设置的组加入标题或者在不同的屏幕中显示这些组。这些选项在下面的章节中会被介绍到。

创建设置组

        假如你实现了超过10个的设置,用户也许在使用,理解和处理他们的时候有一些困难。你可以通过分组来解决这个问题。每一个相关设置的分组可以通过以下两种方法:

使用标题

使用子窗口

        你可以使用一个或者两个以上的技术来组织你的app设置。你决定使用之后,你应当遵循Android设计的设置指导。

使用标题

        假如你想像图2那样使用标题来区分不同的设置组,把每一个Preference objects放到一个PreferenceCategory中去。

2通过标题来为设置分类

1.通过<PreferenceCategory>元素来进行分类

2.这个标题的名字是由android:title属性来指定的

例子:

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory 
android:title="@string/pref_sms_storage_title"
android:key="pref_key_storage_settings">
<CheckBoxPreference
android:key="pref_key_auto_delete"
android:summary="@string/pref_summary_auto_delete"
android:title="@string/pref_title_auto_delete"
android:defaultValue="false"... />
<Preference 
android:key="pref_key_sms_delete_limit"
android:dependency="pref_key_auto_delete"
android:summary="@string/pref_summary_delete_limit"
android:title="@string/pref_title_sms_delete"... />
<Preference 
android:key="pref_key_mms_delete_limit"
android:dependency="pref_key_auto_delete"
android:summary="@string/pref_summary_delete_limit"
android:title="@string/pref_title_mms_delete" ... />
</PreferenceCategory>
...
</PreferenceScreen>

使用子窗口

         假如你想使用子窗口来放不同的设置组(如图3),把Preference组放入到PreferenceScreen中。 

3.设置子窗口。<PreferenceScreen>元素创建一个item,当选择它的时候,就会打开一个内嵌设置的显示列表

例子:

<PreferenceScreen  xmlns:android="http://schemas.android.com/apk/res/android">
<!-- opens a subscreen of settings -->
<PreferenceScreen
android:key="button_voicemail_category_key"
android:title="@string/voicemail"
android:persistent="false">
<ListPreference
android:key="button_voicemail_provider_key"
android:title="@string/voicemail_provider" ... />
<!-- opens another nested subscreen -->
<PreferenceScreen
android:key="button_voicemail_setting_key"
android:title="@string/voicemail_settings"
android:persistent="false">
...
</PreferenceScreen>
<RingtonePreference
android:key="button_voicemail_ringtone_key"
android:title="@string/voicemail_ringtone_title"
android:ringtoneType="notification" ... />
...
</PreferenceScreen>
...
</PreferenceScreen>


 

这篇关于android developer API Guider之user interface---Settings(一)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

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程序包,存

从状态管理到性能优化:全面解析 Android Compose

文章目录 引言一、Android Compose基本概念1.1 什么是Android Compose?1.2 Compose的优势1.3 如何在项目中使用Compose 二、Compose中的状态管理2.1 状态管理的重要性2.2 Compose中的状态和数据流2.3 使用State和MutableState处理状态2.4 通过ViewModel进行状态管理 三、Compose中的列表和滚动

Android 10.0 mtk平板camera2横屏预览旋转90度横屏拍照图片旋转90度功能实现

1.前言 在10.0的系统rom定制化开发中,在进行一些平板等默认横屏的设备开发的过程中,需要在进入camera2的 时候,默认预览图像也是需要横屏显示的,在上一篇已经实现了横屏预览功能,然后发现横屏预览后,拍照保存的图片 依然是竖屏的,所以说同样需要将图片也保存为横屏图标了,所以就需要看下mtk的camera2的相关横屏保存图片功能, 如何实现实现横屏保存图片功能 如图所示: 2.mtk

android应用中res目录说明

Android应用的res目录是一个特殊的项目,该项目里存放了Android应用所用的全部资源,包括图片、字符串、颜色、尺寸、样式等,类似于web开发中的public目录,js、css、image、style。。。。 Android按照约定,将不同的资源放在不同的文件夹中,这样可以方便的让AAPT(即Android Asset Packaging Tool , 在SDK的build-tools目

Android fill_parent、match_parent、wrap_content三者的作用及区别

这三个属性都是用来适应视图的水平或者垂直大小,以视图的内容或尺寸为基础的布局,比精确的指定视图的范围更加方便。 1、fill_parent 设置一个视图的布局为fill_parent将强制性的使视图扩展至它父元素的大小 2、match_parent 和fill_parent一样,从字面上的意思match_parent更贴切一些,于是从2.2开始,两个属性都可以使用,但2.3版本以后的建议使

Android Environment 获取的路径问题

1. 以获取 /System 路径为例 /*** Return root of the "system" partition holding the core Android OS.* Always present and mounted read-only.*/public static @NonNull File getRootDirectory() {return DIR_ANDR

【LabVIEW学习篇 - 21】:DLL与API的调用

文章目录 DLL与API调用DLLAPIDLL的调用 DLL与API调用 LabVIEW虽然已经足够强大,但不同的语言在不同领域都有着自己的优势,为了强强联合,LabVIEW提供了强大的外部程序接口能力,包括DLL、CIN(C语言接口)、ActiveX、.NET、MATLAB等等。通过DLL可以使用户很方便地调用C、C++、C#、VB等编程语言写的程序以及windows自带的大

如何更优雅地对接第三方API

如何更优雅地对接第三方API 本文所有示例完整代码地址:https://github.com/yu-linfeng/BlogRepositories/tree/master/repositories/third 我们在日常开发过程中,有不少场景会对接第三方的API,例如第三方账号登录,第三方服务等等。第三方服务会提供API或者SDK,我依稀记得早些年Maven还没那么广泛使用,通常要对接第三方