首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

使用 Android 和 XML 构建动态用户界面(8)

使用 Android 和 XML 构建动态用户界面(8)

这种方法非常简单:
  • 您通过 XmlGuiForm 实例的 fields 成员中包含的 XmlGuiFormField 对象来列举。
  • 根据请求的字段的类型,一个不同的用户界面元素被实例化并添加到 LinearLayout。您将快速检查不同的 UI 小部件。
当 UI 元素被创建并添加到这个线性布局中后,您将整个 ScrollView 实例添加到这个屏幕的内容并将表单名指定为屏幕标题。 展示了为用户输入准备就绪的一个 Robotics 俱乐部注册屏幕。这个表单是  中的 XML 数据的处理结果。
图 9. 运行中的 Robotics 注册表单我们来看看为这个应用程序创建的不同的自定义用户界面小部件。
回想一下,我们为这个应用程序定义了三种类型的数据输入字段:文本、数值和选项。这三种类型通过两个不同的自定义小部件实现:XmlGuiEditBox 和 XmlGuiPickOne。
文本和数值非常相似,因此可以利用相同的 EditView 方法,但使用不同的输入过滤器来在字母数字和仅允许数字之间切换。 展示了 XmlGuiEditBox 类的代码。
清单 9.XmlGuiEditBox 类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package com.msi.ibm;

import android.content.Context;
import android.util.AttributeSet;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.EditText;
import android.text.method.DigitsKeyListener;

public class XmlGuiEditBox extends LinearLayout {
   TextView label;
   EditText txtBox;

   public XmlGuiEditBox(Context context,String labelText,String initialText) {
      super(context);
      label = new TextView(context);
      label.setText(labelText);
      txtBox = new EditText(context);
      txtBox.setText(initialText);
      txtBox.setLayoutParams(new LayoutParams(ViewGroup.LayoutParams
                   .FILL_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT));
      this.addView(label);
      this.addView(txtBox);
   }

   public XmlGuiEditBox(Context context, AttributeSet attrs) {
      super(context, attrs);
      // TODO Auto-generated constructor stub
   }

   public void makeNumeric()
   {
      DigitsKeyListener dkl = new DigitsKeyListener(true,true);
      txtBox.setKeyListener(dkl);
   }
   public String getValue()
   {
      return txtBox.getText().toString();
   }
   public void setValue(String v)
   {
      txtBox.setText(v);
   }
}




XmlGuiEditBox 类扩展 LinearLayout 类并包含一个文本标签来描述要求的输入,以及一个 EditText 来实际收集输入的数据。所有对象初始化都在构造函数中完成。这也许被视为糟糕的表单,但如果您对这种方法不满意,那么这只是留给您的一个练习。
我们还将讨论三种方法。getValue() 和 setValue() 方法正是您想要的。它们是用于与 EditText 字段交互的 getter 和 setter。
第三种方法 makeNumeric() 仅在设置数值表单类型时才调用。DigitsKeyListener 的实例用于过滤任何非数值键。您免费获取的另一个好处是,适当的键盘将根据正在使用的 XmlGuiEditBox 类型而显示 — 带有或没有数值设置。
展示了运行中的表单,显示了一个字母键盘,原因是 Last Name 字段设置为输入字母,即 text。
图 10. 字母数值键输入 展示了正在使用数值键盘,原因是 age 字段的数据类型设置为 numeric。
图 11. 数值键盘选择字段通过 XmlGuiPickOne 类在用户界面中实现,与上述输入字段有点不同。这个选择字段被实现为一个 Android Spinner 小部件。这个用户界面元素类似于其他编程环境中的下拉列表框,在那里,用户必须从一些现成选项中选择一个选项。 展示三个实例 XmlGuiPickOne 小部件。
图 12. 带有三个 XmlGuiPickOne 的汽车维修调查表在本例中,正在收集的数据用于统计目的,与处理自由文本输入字段相比,规范化可能的输入使得数据处理更整洁。当然,如果您想将这次调查限制到一个特殊的地理区域的话,可以将 State 字段定义为一个选择字段。
返回列表