Android 选择器
最后修改于 2012年11月21日
在本章的 Android 开发教程中,我们将讨论 Android 选择器。选择器是允许我们从一组值中选择单个值的控件。
有数字、日期或时间选择器。
NumberPicker
NumberPicker 是一个允许我们从预定义值范围中选择数字的控件。在这个例子中,清单文件未被修改。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<NumberPicker android:id="@+id/npId"
android:layout_marginTop="5dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/tvId"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:layout_marginLeft="5dp"
android:text="0"
android:textSize="30sp" />
</LinearLayout>
在布局文件中,我们有一个 NumberPicker 控件和一个 TextView 控件。TextView 控件将显示 NumberPicker 的选定值。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">NumberPicker</string>
</resources>
字符串资源文件。
package com.zetcode.numpick;
import android.app.Activity;
import android.os.Bundle;
import android.widget.NumberPicker;
import android.widget.TextView;
import android.widget.NumberPicker.OnValueChangeListener;
public class MainActivity extends Activity
{
private TextView tv;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
setupUI();
}
public void setupUI()
{
tv = (TextView) findViewById(R.id.tvId);
NumberPicker np = (NumberPicker) findViewById(R.id.npId);
np.setOnValueChangedListener(new OnValueChangeListener()
{
public void onValueChange(NumberPicker picker, int oldVal,
int newVal)
{
tv.setText(String.valueOf(newVal));
}
});
np.setMaxValue(100);
np.setMinValue(0);
}
}
通过点击 NumberPicker 的加号和减号,我们可以选择一个新值。当前选定的值将显示在 TextView 控件中。
NumberPicker np = (NumberPicker) findViewById(R.id.npId);
从 main.xml 文件中检索 NumberPicker 控件的引用。
np.setOnValueChangedListener(new OnValueChangeListener()
{
public void onValueChange(NumberPicker picker, int oldVal,
int newVal)
{
tv.setText(String.valueOf(newVal));
}
});
向 NumberPicker 控件添加了一个 OnValueChangeListener。当 NumberPicker 的值改变时,它会调用 onValueChange() 方法。在此方法中,我们将当前选定的值设置为 TextView 控件。
np.setMaxValue(100); np.setMinValue(0);
我们为 NumberPicker 设置了最大值和最小值。
TimePicker
TimePicker 是一个用于选择一天中时间的控件。它有两种模式:24小时制或上午/下午制。可以通过垂直的微调器来控制小时和分钟数字的选择。DatePicker 是一个用于选择日期的控件。它与 TimePicker 非常相似。
清单文件未被修改。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TimePicker android:id="@+id/tpId"
android:layout_marginTop="5dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/tvId"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:layout_marginLeft="5dp"
android:textSize="30sp" />
</LinearLayout>
在 main.xml 文件中,我们有 TimePicker 和 TextView 控件。选定的时间显示在 TextView 中。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">TimePicker</string>
</resources>
这是 strings.xml 资源文件。
package com.zetcode.timepicker;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TimePicker;
import android.widget.TextView;
import android.widget.TimePicker.OnTimeChangedListener;
public class MainActivity extends Activity
{
private TextView tv;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
setupUI();
}
public void setupUI()
{
tv = (TextView) findViewById(R.id.tvId);
TimePicker tp = (TimePicker) findViewById(R.id.tpId);
displayCurrentTime(tp);
tp.setOnTimeChangedListener(new OnTimeChangedListener()
{
public void onTimeChanged(TimePicker view, int hourOfDay,
int minute)
{
StringBuilder tm = new StringBuilder();
tm.append(hourOfDay);
tm.append(" h ");
tm.append(minute);
tm.append(" m");
tv.setText(tm);
}
});
}
public void displayCurrentTime(TimePicker tp)
{
int h = tp.getCurrentHour();
int m = tp.getCurrentMinute();
StringBuilder tm = new StringBuilder();
tm.append(h);
tm.append(" h ");
tm.append(m);
tm.append(" m");
tv.setText(tm);
}
}
TimePicker 监听 OnTimeChangedListener。当时间改变时,新的时间值在 onTimeChanged() 方法中被设置为 TextView。
tp.setOnTimeChangedListener(new OnTimeChangedListener()
{
public void onTimeChanged(TimePicker view, int hourOfDay,
int minute)
{
StringBuilder tm = new StringBuilder();
tm.append(hourOfDay);
tm.append(" h ");
tm.append(minute);
tm.append(" m");
tv.setText(tm);
}
});
在一个匿名的 OnTimeChangedListener 类中,我们实现了 onTimeChanged() 方法。我们使用 StringBuilder 来构建要显示的字符串,并将其设置为 TextView 控件。
public void displayCurrentTime(TimePicker tp)
{
int h = tp.getCurrentHour();
int m = tp.getCurrentMinute();
StringBuilder tm = new StringBuilder();
tm.append(h);
tm.append(" h ");
tm.append(m);
tm.append(" m");
tv.setText(tm);
}
当活动首次显示时,我们显示当前时间。
在本章的 Android 开发教程中,我们讨论了选择器。