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

android chebox只能单选 安卓单选_android chebox只能单选

二、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);

android chebox只能单选 安卓单选_下拉列表_02

三、日期时间选择器、滚动面板

日期选择器的设置

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

android chebox只能单选 安卓单选_下拉列表_03

时间选择也可以通过TimePicker来实现。

<TimePicker
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />