7.1.1. 资源文件
7.1.1.资源文件
首先创建一个资源文件prefs.xml——它用来声明首选项界面的内容。创建它的最简单方法就是使用Eclipse的New Android XML工具:可以选择File→New→Android XML File,也可以点击菜单栏上的按钮。
图7.1. New Android XML File
输入文件的名字,也就是prefs.xml,选择资源类型为Preference。工具缺省将文件放在/res/xml目录下边,且其根节点为PreferenceScreen。前面Alternative Resources一节中提到,我们可以为同一资源设置多个不同的资源文件,以适应不同的屏幕尺寸、语言及区域等参数的需要。
Note:
在这里我们通过Eclipse的辅助工具简化了工作。如果使用其它工具,可能就需要手工创建这个文件并将其置于合适的目录之下。
点击Finish,Eclipse即可创建出这个文件,同时打开一个开发者友好的界面,允许你编辑它。
在这个界面中,选择左边的PreferenceScreen,然后Add→EditTextPreference,这就可以为username创建对应的选项条目了。展开右边Preference下边的Attributes,可以见到EditTextPreference的诸多属性。
属性有很多,但是我们关心的一般也只有如下几个:
Key
每个选项条目的唯一标识符。用以获取相应选项条目的引用。
Title
用户见到的选项名称。长度不要超过屏幕的一行。
Summary
针对这个选项条目的简介信息。此项可选,但强烈建议提供上。
对username一项而言,key就是username。至于Title与Summary的值,我们都放在string.xml里面,这是个好习惯。
编辑string.xml也可以使用Eclipse提供的辅助工具。步骤如下:
- 单击Browse,选择New String...,打开新建string资源的对话框。
- 为R.string输入titleUsername,为String输入Username。
- 单击Ok,即可在strings.xml中插入一条新的string资源。
- 随后就可以在资源列表中取出来引用它了。
如上即为创建Username选项条目的步骤。对Password及API Root两项同理。
要查看实际的xml代码,可以单击窗口底下的标签。
图7.2. Prefs.xml 的图形化编辑界面
它的内容大致如下:
例 7.1. res/xml/prefs.xml
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<EditTextPreference android:title="@string/titleUsername"
android:summary="@string/summaryUsername" android:key="username"></EditTextPreference>
<EditTextPreference android:title="@string/titlePassword"
android:password="true" android:summary="@string/summaryPassword"
android:key="password"></EditTextPreference>
<EditTextPreference android:title="@string/titleApiRoot"
android:summary="@string/summaryApiRoot" android:key="apiRoot"></EditTextPreference>
</PreferenceScreen>
<PreferenceScreen>是定义首选项界面的根节点。它下面有三个子元素,皆为<EditTextPreference>,也就都是文本框。常见的元素还有<CheckBoxPreference>,<ListPreference>等等。
以上最重要的属性就是key了,它是获取对应的配置数据所必需的标识符。前面提到,首选项正是一组键值对(Key-Value Pair)构成的数据集。
如前所说,编辑XML有Eclipse提供的辅助工具可用,它们界面友好,使用方便,但有时这也限制了灵活性。比如按照惯例,我们一般希望在密码框中隐藏数据的输入,Android也提供了这一功能的支持,但是Eclipse中的工具还没有跟上。这时就需要手工修改XML了:为password元素添加一个属性android:password="true",即可在密码框中隐藏用户的输入。