使用 Android 原生 API 开发设置界面

   2017-02-05 0
核心提示:算是 17 年第一篇文章,初衷就是简单介绍下用 xml 配置设置界面,为自定义设置界面 UI 做一个铺垫。场景介绍为了更好的用户体验,现在的大多数的应用都会提供一个设置界面,供用户去设置一些应用属性,比如用户名、昵称等信息的修改,或者还会有一些消息开关

算是 17 年第一篇文章,初衷就是简单介绍下用 xml 配置设置界面,为自定义设置界面 UI 做一个铺垫。

场景介绍

为了更好的用户体验,现在的大多数的应用都会提供一个设置界面,供用户去设置一些应用属性,比如用户名、昵称等信息的修改,或者还会有一些消息开关等都会在设置界面中完成。如下所示就是一个常见的设置界面截图(from 咕咚翻译)

使用 Android 原生 API 开发设置界面

类似这样的设置界面在一个应用中都会或多或少的存在。对于开发者而言,如何快速开发这样的设置界面呢?

对一个开发者而言,如果他对 Android 提供的设置 API 不了解,可能会自然而然的想到使用 layout 去画出来。然后在Activity 中实例化每个 item 对应的view,接着处理对应的 click、check 等事件。但是看到这里你应该已经知道 Android 已经提供了设置相关的 API,可以方便开发者快速开发设置 UI 。

这就是现在要说的 PreferenceActivity / PreferenceFragment 。

更多关于设置相关的官方介绍可通过 Setting 查阅。

建议直接看官方文档,比这里更加全面。

主要API 介绍

见名知意,

这俩是 Android 系统提供的两个跟设置相关的 API 组件,使用他们就可以方便快捷的开发出具有统一体验的设置UI。鉴于灵活性,大多数时候个人使用 ·PreferenceFragment 较多。

开发指南

几个要点

  • 不同于一般的 Fragment, PreferenceFragment 的布局是通过在XML 文件中声明的  Preference  类的各种子类构建而成,而不是使用  View  对象构建用户界面。
  • 您必须将 XML 文件保存在 res/xml/ 目录中。尽管您可以随意命名该文件,但它通常命名为 preferences.xml
  • XML 文件的根节点必须是一个 PreferenceScreen 元素。您可以在此元素内添加每个 Preference。在 元素内添加的每个子项均将作为单独的项目显示在设置列表中。

如下所示就是一个常规的设置配置文件。

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

使用配置文件

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();
    }
}

至此,启动 SettingsActivity 就可以看到一个设置界面了。

原理分析

这里简单说下背后的原理。

PreferenceFragment 和 PreferenceActivity 的布局本身包含一个 ListView ,使用 addPreferencesFromResource 方法后,PreferenceFragment 他们会去解析 xml 文件中定义的 Preference 对象,并把它们实例化,然后通过 Adapter 的形式填充到 ListView。然后就是我们看到的设置界面了。

关于

这篇文章属于技术介绍类文章,主要是为下一篇文章《自定义设置 UI 》做铺垫,其实没什么干货可写的,因为官方文档已经很详细,所以文章一开头,我也建议直接去看官方提供的文档,现在已经有很好的中文版本了,而且讲得很详细,很权威。

 
标签: API 安卓开发
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • [译] Android API 指南
    [译] Android API 指南
    众所周知,Android开发者有中文网站了,API 指南一眼看去最左侧的菜单都是中文,然而点进去内容还是很多是英文,并没有全部翻译,我这里整理了API 指南的目录,便于查看,如果之前还没有通读,现在可以好好看一遍。注意,如果标题带有英文,说明官方还没有翻
  • 第114期:如果你想要开发一个图片 App,Unsplash API 值得你去玩
    第114期:如果你想要开发一个图片 App,Unsplas
    第114期:如果你想要开发一个图片 App,Unsplash API 值得你去玩头条推荐 1、如果你想要开发一个图片 App,Unsplash API 值得你去玩 Unsplash 是一个免费高质量照片的网站,都是真实的摄影照片,照片分辨率也很大,用来做网页素材已经足够,该照片网站每10天
  • [厉害了Word哥]这些API接口,随便拿出来一个就能装逼、赚钱
    [厉害了Word哥]这些API接口,随便拿出来一个
    来源: http://androidwing.net/index.php MVP盛行,听到的最多的抱怨就是咋要写这么多接口,那么本文作者提供了一个插件,自动生成这些接口的声明。感兴趣的还可以学习该插件的写法,按照自己平时的需求修改,提供开发效率。MVPHelper一款Intellj IDEA 和And
    11-10 APIJava
  • 第112期:如何在没有官方API的情况下写一个第三方客户端
    第112期:如何在没有官方API的情况下写一个第三
    第112期:如何在没有官方API的情况下写一个第三方客户端小公告 Diycode 社区、项目、News、sites 的 API 发布了 大家想怎么玩?Android开发 五分钟带你看懂 Android NestedScrolling 嵌套滑动机制 你了解 NestedScrolling 机制吗? 如何在没有官方API的情况下
  • android 快速开发框架 2.0, 新增异常崩溃友好页面, 开放全套 API 供大家使用
    android 快速开发框架 2.0, 新增异常崩溃友好页
    RapidDevelop-Android快速开发框架 框架持续更新中 这个框架是从平时项目里用的比较多的框架里整合而来 对本项目感兴趣的可以一起研究喜欢的朋友欢迎star 同时也欢迎大家的宝贵意见issues如果大家对MVP模式的开发 网络爬虫以及缓存策略感兴趣的话可以看看我最
  • 学习笔记:Notification API
    学习笔记:Notification API
    Notification API 是浏览器的通知接口,用于在用户的桌面上显示通知信息,桌面电脑和手机都适用。具体的实现形式由浏览器自行部署,对于手机来说,一般显示在顶部的通知栏。如果网页代码调用这个API,浏览器会询问用户是否接受。只有在用户同意的情况下,通知
  • 利用聚合数据API进行Android开发之短信验证码
    利用聚合数据API进行Android开发之短信验证码
    在说Android中的短信验证码这个知识点前,我们首先来了解下聚合数据聚合数据介绍聚合数据是一家国内最大的基础数据API提供商,专业从事互联网数据服务。免费提供从天气查询、空气质量、地图坐标到金融基金、电商比价、违章查询等各个领域的安全、稳定和高效的
  • 使用Android API最佳实践
    使用Android API最佳实践
    写在前面 现在,Android应用程序中集成第三方API已十分流行。应用程序都有自己的网络操作和缓存处理机制,但是大部分比较脆弱,没有针对网络糟糕情况进行优化。感谢 Square lnc这家有创新精神的公司,将信用卡商业交易带到手机上。现在有了一系列高质量开源库
    09-20 APIRetrofit
  • RESTful Android 网络层解决方案(三):API model 与 Business model 分离
    RESTful Android 网络层解决方案(三):API mo
    在拆轮子系列:拆 Okio最后我曾说过会对 Retrofit、OkHttp、Okio 三者进行一个小结,并且整理一套网络层的“微架构”,今天终于得以完成,在这里一起奉送给大家 :) RESTful 安卓网络层解决方案(一):概览与认证实现方案 RESTful 安卓网络层解决方案(二):
    09-11 APIREST
  • RESTful Android 网络层解决方案(二):空 JSON 和 API Error 解析
    RESTful Android 网络层解决方案(二):空 JSO
    在拆轮子系列:拆 Okio 最后我曾说过会对 Retrofit、OkHttp、Okio 三者进行一个小结,并且整理一套网络层的“微架构”,今天终于得以完成,在这里一起奉送给大家 :) RESTful 安卓网络层解决方案(一):概览与认证实现方案:checkered_flag: RESTful 安卓网络
    09-08 APIJSON
点击排行