NumberPicker

来源:互联网 发布:淘宝商家客服电话 编辑:程序博客网 时间:2024/05/08 16:16

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函数中规定,如下代码:

[java] view plain copy
  1. public String format(int value) {  
  2.         String tmpStr = String.valueOf(value);  
  3.         if (value < 10) {  
  4.             tmpStr = "0" + tmpStr;  
  5.         }  
  6.         return tmpStr;  
  7.     }  
value值在0—23之间,小于10的数在前面加上“0”。

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

1、创建布局文件widget_number_picker_layout.xml

[html] view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent" >  
  5.   
  6.     <NumberPicker  
  7.         android:id="@+id/show_num_picker"  
  8.         android:layout_width="wrap_content"  
  9.         android:layout_height="wrap_content"  
  10.         android:layout_alignParentLeft="true"  
  11.         android:layout_alignParentTop="true"  
  12.         android:layout_marginLeft="71dp"  
  13.         android:layout_marginTop="141dp" />  
  14.   
  15. </RelativeLayout>  
2、创建activity——WidgetNumPickerActivity

[java] view plain copy
  1. package com.xy.zt.selfdefinewieget;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.util.Log;  
  6. import android.widget.NumberPicker;  
  7. import android.widget.NumberPicker.Formatter;  
  8. import android.widget.NumberPicker.OnScrollListener;  
  9. import android.widget.NumberPicker.OnValueChangeListener;  
  10. import android.widget.Toast;  
  11.   
  12. public class WidgetNumPickerActivity extends Activity implements  
  13.         OnValueChangeListener, Formatter, OnScrollListener {  
  14.     private NumberPicker mNumberPicker;  
  15.   
  16.     @Override  
  17.     public void onCreate(Bundle savedInstanceState) {  
  18.         super.onCreate(savedInstanceState);  
  19.         setContentView(R.layout.widget_number_picker_layout);  
  20.         init();  
  21.     }  
  22.   
  23.     private void init() {  
  24.         mNumberPicker = (NumberPicker) findViewById(R.id.show_num_picker);  
  25.         mNumberPicker.setFormatter(this);  
  26.         mNumberPicker.setOnValueChangedListener(this);  
  27.         mNumberPicker.setOnScrollListener(this);  
  28.         mNumberPicker.setMaxValue(23);  
  29.         mNumberPicker.setMinValue(0);  
  30.         mNumberPicker.setValue(10);  
  31.     }  
  32.   
  33.     public void onValueChange(NumberPicker picker, int oldVal, int newVal) {  
  34.         Log.i("tag""oldValue:" + oldVal + "   ; newValue: " + newVal);  
  35.         Toast.makeText(  
  36.                 this,  
  37.                 "number changed --> oldValue: " + oldVal + " ; newValue: "  
  38.                         + newVal, Toast.LENGTH_SHORT).show();  
  39.     }  
  40.   
  41.     public String format(int value) {  
  42.         String tmpStr = String.valueOf(value);  
  43.         if (value < 10) {  
  44.             tmpStr = "0" + tmpStr;  
  45.         }  
  46.         return tmpStr;  
  47.     }  
  48.   
  49.     public void onScrollStateChange(NumberPicker view, int scrollState) {  
  50.         switch (scrollState) {  
  51.         case OnScrollListener.SCROLL_STATE_FLING:  
  52.             Toast.makeText(this"scroll state fling", Toast.LENGTH_LONG)  
  53.                     .show();  
  54.             break;  
  55.         case OnScrollListener.SCROLL_STATE_IDLE:  
  56.             Toast.makeText(this"scroll state idle", Toast.LENGTH_LONG).show();  
  57.             break;  
  58.         case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:  
  59.             Toast.makeText(this"scroll state touch scroll", Toast.LENGTH_LONG)  
  60.                     .show();  
  61.             break;  
  62.         }  
  63.   
  64.     }  
  65. }  
[java] view plain copy
  1.   

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



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

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

[java] view plain copy
  1. public static final int NUMBER_PICKER_ID = TIME_PICKER_ID + 1;  
  2.     public static final String NUMBER_PICKER_NAME = "NumberPicker";  
  3. private static final ViewData mNumPicker = new ViewData(NUMBER_PICKER_NAME,  
  4.             NUMBER_PICKER_ID);  
  5. View_Datas.add(mNumPicker);  

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

[java] view plain copy
  1. case ViewData.NUMBER_PICKER_ID:  
  2.             intent.setClass(mContext, WidgetNumPickerActivity.class);  
  3.             mContext.startActivity(intent);  
  4.             break;  
NumberPicker控件就学到这,下一个控件DigitalClock。

0 0