在Android中,也可以通过组件实现HTML表单中的各种功能,但这里不包含隐藏域的组件,因为没有必要。
常用的表单组件中,比较复杂的是选择类的组件,这里可以使用以下的组件实现:单选,多选,下拉列表,日期选择,时间选择的功能。
一、单选,多选:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/login_bg"
android:orientation="vertical"
android:paddingBottom="5dp"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:paddingTop="5dp" >
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="性别: "
android:textColor="#000000" />
<RadioGroup
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<RadioButton
android:text="男"
android:textColor="#000000" />
<RadioButton
android:text="女"
android:textColor="#000000" />
</RadioGroup>
</LinearLayout>
单选应该还支持默认选中功能。
<RadioButton
android:text="男"
android:checked="true"
android:textColor="#000000" />
但要注意,这样写有bug,如果写上为true,则永远无法再进行切换,一直为true
因此建议在程序中进行默认选中的设置。
RadioGroup
android:id="@+id/radio"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
public class MainActivity extends Activity {
private RadioGroup radio;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 设置所使用的布局界面
setContentView(R.layout.activity_main);
radio = (RadioGroup) findViewById(R.id.radio);
// 可以通过check()方法来设置选中某一个单选,但要传递该单选按钮的id值.
// 如果为每个单选按钮设置id, 比较麻烦,因此这里通过 按钮的position下标,直接取得按钮,再通过getId()取得id值来设置.
radio.check(radio.getChildAt(0).getId());
}
}
如果选项不是写死的形式,而是通过传递的集合数据动态生成的,可以通过程序来进行选项的建立。
public class MainActivity extends Activity {
private RadioGroup radio;
private String[] allValues = { "男", "女", "未知" };
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 设置所使用的布局界面
setContentView(R.layout.activity_main);
radio = (RadioGroup) findViewById(R.id.radio);
// 可以通过check()方法来设置选中某一个单选,但要传递该单选按钮的id值.
// 如果为每个单选按钮设置id, 比较麻烦,因此这里通过 按钮的position下标,直接取得按钮,再通过getId()取得id值来设置.
// radio.check(radio.getChildAt(0).getId());
// 动态为单选按钮组加入选项
// 循环数组或集合,建立单选按钮
for (int i = 0; i < allValues.length; i++) {
RadioButton button = new RadioButton(this);
button.setText(allValues[i]);
button.setTextColor(Color.BLACK);
radio.addView(button);
}
}}
多选框使用方法与单选基本相同,只不过换成CheckBox
这里没有CheckBoxGroup,可以直接使用LinearLayout替代之前的RadioGroup。
<LinearLayout
android:id="@+id/checkbox"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<CheckBox
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:checked="true"
android:text="巴厘岛"
android:textColor="#000000" />
<CheckBox
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:checked="true"
android:text="马尔代夫"
android:textColor="#000000" />
<CheckBox
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="三亚"
android:textColor="#000000" />
<CheckBox
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="香格里拉"
android:textColor="#000000" />
<CheckBox
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:checked="true"
android:text="马来西亚"
android:textColor="#000000" />
</LinearLayout>
二、Spinner下拉列表
下拉列表中的数据不能直接加入,可以通过XML来进行固定的配置,或使用Adpater来动态加入。
写死的数据,可以打开values.xml,来加入一段配置。
<Spinner
android:id="@+id/spinner"
android:entries="@array/area_array"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
//这里的@array的数据就是在strngs.xml中声明的String Array数组
如果想动态生成数据,也要通过程序完成,需要建立一个ArrayAdapter的类,来转换传入的List集合或String[]数据。
// 取得Spinner组件
spinner = (Spinner) findViewById(R.id.spinner);
// 根据数据,建立适配器
adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item, allAreaValues);
// 设置选项弹出后的显示样式
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
//如果不想使用系统自带的显示样式,也可以自己在res/layout中声明一个自定义的TextView的样式。
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:textColor="#ff0000"
android:textSize="15sp"
android:layout_height="wrap_content" >
</TextView>
// 根据数据,建立适配器
adapter = new ArrayAdapter<String>(this,
R.layout.my_spinner_item, allAreaValues);
三、日期时间选择器、滚动面板
日期选择器的设置
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="选择生日: "
android:textColor="#000000" />
<DatePicker
android:layout_width="match_parent"
android:layout_height="wrap_content" />
但这时,内容已经超出了屏幕范围,因此需要加入一个滚动面版,来实现屏幕滚动的功能。
滚动面版中要求只能有一个子节点。
因此这里要将滚动面版ScrollView加入到最外面,作为根节点来使用
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/login_bg"
android:orientation="vertical"
android:paddingBottom="5dp"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:paddingTop="5dp" >
同时,里面的LinearLayout的高度,必须设置成为wrap_content
如果想使用水平滚动支持,可以加入水平滚动面版
还可以取消滚动条的显示
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="none" >
时间选择也可以通过TimePicker来实现。
<TimePicker
android:layout_width="match_parent"
android:layout_height="wrap_content" />