您的位置:首页 > 移动开发 > Android开发

Android NumberPicker

2016-08-08 22:54 197 查看
NumberPicker是一个滑动数字选择控件,把指定范围内数字排列在垂直方向上下滑动,交互体验与之前讲过的TimePickerDatePicker类似。

NumberPicker控件主要用到的监听事件有两个分别是:

NumberPicker.OnValueChangeListener ,用于监听数值变化,通过此接口可以得到变化前的值和当前值

NumberPicker.OnScrollListener,用于监听滑动状态变化,其状态有SCROLL_STATE_FLING 、 SCROLL_STATE_IDLE 、 SCROLL_STATE_TOUCH_SCROLL,文章最后最详细解释这些状态的含义。

既然NumberPickersv 使用一组预定义并且有范围的数字,那么就需要设置相应的最小值和最大值,对应以下两个方法

numberPicker.setMinValue(0);//设置最小值为0

numberPicker.setMaxValue(20);//设置最大值为20

下面通过一个例子说明以上概念,效果图如下所示:





主界面XML布局代码:
<RelativeLayout 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" >

<NumberPicker
android:id="@+id/numberPicker1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true" />

<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/numberPicker1"
android:layout_centerHorizontal="true"
android:text="获取当前值" />

</RelativeLayout>


Activity文件代码:
package com.my.androidtest;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.NumberPicker;
import android.widget.NumberPicker.Formatter;
import android.widget.NumberPicker.OnScrollListener;
import android.widget.NumberPicker.OnValueChangeListener;
import android.widget.Toast;

public class NumberPickerActivity extends Activity implements OnValueChangeListener, Formatter, OnScrollListener {
NumberPicker numberPicker=null;
Button button=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_number_picker);

numberPicker=(NumberPicker)this.findViewById(R.id.numberPicker1);
numberPicker.setFormatter(this); //格式化数字,需重写format方法,详情见下面的代码
numberPicker.setOnValueChangedListener(this); //值变化监听事件
numberPicker.setOnScrollListener(this); //滑动监听事件
numberPicker.setMinValue(0);//最小值
numberPicker.setMaxValue(20);//最大值
numberPicker.setValue(1);//设置初始选定值

button=(Button)this.findViewById(R.id.button1);
button.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
Toast.makeText(NumberPickerActivity.this, "当前值是:"+numberPicker.getValue(), Toast.LENGTH_SHORT).show();
}
});

}
@Override
public void onScrollStateChange(NumberPicker view, int scrollState) {
switch (scrollState) {
case OnScrollListener.SCROLL_STATE_FLING:
Toast.makeText(this, "scroll state fling", Toast.LENGTH_LONG)
.show();
break;
case OnScrollListener.SCROLL_STATE_IDLE:
Toast.makeText(this, "scroll state idle", Toast.LENGTH_LONG).show();
break;
case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:
Toast.makeText(this, "scroll state touch scroll", Toast.LENGTH_LONG)
.show();
break;
}
}
@Override
public String format(int value) {
String tmpStr = String.valueOf(value);
if (value < 10) {
tmpStr = "0" + tmpStr;
}
return tmpStr;
}
@Override
public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
Toast.makeText(this, "值发生变化 ,原值: " + oldVal + " , 新值:"+ newVal, Toast.LENGTH_SHORT).show();
}
}


注意 Activity需要用implements关键字实现以下接口 OnValueChangeListener, Formatter, OnScrollListener ,否则无法进行事件监听,例如本例:

public class NumberPickerActivity extends Activity implements OnValueChangeListener, Formatter, OnScrollListener

覆写完对应方法后需使用setFormatter(this),setOnValueChangedListener(this),setOnScrollListener(this)把相应事件设置到NumberPicker控件上。

本例通过两种方式获取NumberPicker上的值

(1)通过OnValueChangeListener监听事件可以同时获取原值和当前值

(2)在button的click事件中使用 numberPicker.getValue()这个方法获取当前值

NumberPicker主要方法整理如下:
NumberPicker.setFormatter(Formatter formatter)

格式化NumberPicker内部的数字

实现功能需要覆写format方法,格式public String format(int value),参数value是原数字,返回值是String类型的,详情参考本例代码。
NumberPicker.setOnValueChangedListener(OnValueChangeListener onValueChangedListener)

值变化监听事件

需要在内部重写onValueChange方法,格式如下:

public void onValueChange(NumberPicker picker, int oldVal, int newVal)

参数 picker 当前控件, oldVal变化之前的值,newVal改变后的新值(当前值)
NumberPicker.setOnScrollListener(OnScrollListener onScrollListener)

滑动状态变化监听事件,分为3种状态:

SCROLL_STATE_TOUCH_SCROLL:用户按下去然后滑动

SCROLL_STATE_FLING: 正在滑动中的状态

SCROLL_STATE_IDLE: NumberPicker停止滑动
NumberPicker.setMinValue(int minValue)

设置最小值
NumberPicker.setMaxValue(int maxValue)

设置最大值
NumberPicker.setValue(int value)

NumberPicker设置初始选定值,如果不设置此项NumberPicker初始状态默认选中最小值
NumberPicker.getValue()

获取当前选定值,返回值int类型
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息