NumberPicker 是用于选择一组预定义好数字的控件。比如时间hour的选择只有0—23有效,则可以通过setMinValue和setMaxValue设定。
使用该控件时需注意他的两个listener和一个formatter:一个listener用于监听当前value的变化;一个listener用于监听该控件的scroll状态;formatter用于格式化显示该控件中的value。下面逐一介绍这几个接口:
1、NumberPicker.OnValueChangeListener :其函数public void onValueChange(NumberPicker picker, int oldVal, int newVal) ;oldVal前一个选中的值,newValue当前选中的值。
2、NumberPicker.OnScrollListener:其内部有三种scroll状态SCROLL_STATE_FLING 、 SCROLL_STATE_IDLE 、 SCROLL_STATE_TOUCH_SCROLL。
SCROLL_STATE_TOUCH_SCROLL:用户按下去然后滑动。
SCROLL_STATE_FLING: 相当于是SCROLL_STATE_TOUCH_SCROLL的后续滑动操作。
SCROLL_STATE_IDLE: NumberPicker不在滚动。
3、NumberPicker.Formatter: 格式化显示数字,例如1—12格式化为01 — 12 。具体的格式在format函数中规定,如下代码:
public String format(int
i) {
String tmpStr = String.valueOf(i);
if (i <
10) {
tmpStr = "0" + tmpStr;
}
return tmpStr;
}
value值在1—12之间,小于10的数在前面加上“0”。
实现如下:
Xml布局:
<NumberPicker
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/numberPicker"
>
Activity代码的实现:
numberPicker= (NumberPicker) findViewById(R.id.numberPicker);
private void initNumberPicter() {
numberPicker.setMaxValue(12);
numberPicker.setMinValue(1);
numberPicker.setValue(6);
numberPicker.setOnValueChangedListener(new
NumberPicker.OnValueChangeListener() {
@Override
public void
onValueChange(NumberPicker numberPicker, int
i, int i1) {
Log.d("xyz","i="+i+",il="+i1);
}
});
numberPicker.setOnScrollListener(new
NumberPicker.OnScrollListener() {
@Override
public void
onScrollStateChange(NumberPicker numberPicker, int
i) {
switch (i) {
case NumberPicker.OnScrollListener.SCROLL_STATE_FLING:
Toast.makeText(RadioActivity.this,
"scroll state fling", Toast.LENGTH_LONG).show();
break;
case NumberPicker.OnScrollListener.SCROLL_STATE_IDLE:
Toast.makeText(RadioActivity.this,
"scroll state idle", Toast.LENGTH_LONG).show();
break;
case NumberPicker.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:
Toast.makeText(RadioActivity.this,
"scroll state touch scroll", Toast.LENGTH_LONG).show();
break;
}
}
});
numberPicker.setFormatter(new
NumberPicker.Formatter() {
@Override
public
String format(int
i) {
String tmpStr = String.valueOf(i);
if (i <
10) {
tmpStr = "0" + tmpStr;
}
return tmpStr;
}
});
}