一步一步学android控件(之十四) —— NumberPicker

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: 格式化显示数字,例如0—23格式化为00 — 23 。具体的格式在format函数中规定,如下代码:

public String format(int value) {
        String tmpStr = String.valueOf(value);
        if (value < 10) {
            tmpStr = "0" + tmpStr;
        }
        return tmpStr;
    }
value值在0—23之间,小于10的数在前面加上“0”。

接下来就是一步一步完成上述功能:

1、创建布局文件widget_number_picker_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <NumberPicker
        android:id="@+id/show_num_picker"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="71dp"
        android:layout_marginTop="141dp" />

</RelativeLayout>
2、创建activity——WidgetNumPickerActivity

package com.xy.zt.selfdefinewieget;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
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 WidgetNumPickerActivity extends Activity implements
        OnValueChangeListener, Formatter, OnScrollListener {
    private NumberPicker mNumberPicker;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.widget_number_picker_layout);
        init();
    }

    private void init() {
        mNumberPicker = (NumberPicker) findViewById(R.id.show_num_picker);
        mNumberPicker.setFormatter(this);
        mNumberPicker.setOnValueChangedListener(this);
        mNumberPicker.setOnScrollListener(this);
        mNumberPicker.setMaxValue(23);
        mNumberPicker.setMinValue(0);
        mNumberPicker.setValue(10);
    }

    public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
        Log.i("tag", "oldValue:" + oldVal + "   ; newValue: " + newVal);
        Toast.makeText(
                this,
                "number changed --> oldValue: " + oldVal + " ; newValue: "
                        + newVal, Toast.LENGTH_SHORT).show();
    }

    public String format(int value) {
        String tmpStr = String.valueOf(value);
        if (value < 10) {
            tmpStr = "0" + tmpStr;
        }
        return tmpStr;
    }

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

    }
}

其中一个状态的效果图如下:



3、下面代码完善整个工程,如下有不清楚的内容参见一步一步学android控件(之一) —— 开始篇

在ViewData.java中添加如下内容:

public static final int NUMBER_PICKER_ID = TIME_PICKER_ID + 1;
    public static final String NUMBER_PICKER_NAME = "NumberPicker";
private static final ViewData mNumPicker = new ViewData(NUMBER_PICKER_NAME,
            NUMBER_PICKER_ID);
View_Datas.add(mNumPicker);

在WidgetsAdapter的handleItemClick函数中添加如下内容:

case ViewData.NUMBER_PICKER_ID:
            intent.setClass(mContext, WidgetNumPickerActivity.class);
            mContext.startActivity(intent);
            break;
NumberPicker控件就学到这,下一个控件DigitalClock。




  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值