Android控件之NumberPicter(数字选择器)的使用

本文介绍了Android中的NumberPicker控件,用于在预设范围内选择数字,如设置时间选择。NumberPicker提供了OnValueChangeListener监听值变化,OnScrollListener监听滚动状态,以及Formatter接口来格式化显示数字。在示例中展示了如何设置最小值、最大值,并通过监听器和格式化器实现特定功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

NumberPicker 是用于选择一组预定义好数字的控件。比如时间hour的选择只有023有效,则可以通过setMinValuesetMaxValue设定。

 

使用该控件时需注意他的两个listener和一个formatter:一个listener用于监听当前value的变化;一个listener用于监听该控件的scroll状态;formatter用于格式化显示该控件中的value。下面逐一介绍这几个接口:

 

1NumberPicker.OnValueChangeListener :其函数public void onValueChange(NumberPicker picker, int oldVal, int newVal) oldVal前一个选中的值,newValue当前选中的值。

 

2NumberPicker.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_IDLENumberPicker不在滚动。

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;
        }
    });
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值