一步一步學android控制元件(之十四) —— NumberPicker
阿新 • • 發佈:2018-12-23
NumberPicker 是用於選擇一組預定義好數字的控制元件。比如時間hour的選擇只有0—23有效,則可以通過setMinValue和setMaxValue設定。
使用該控制元件時需注意他的兩個listener和一個formatter:一個listener用於監聽當前value的變化;一個listener用於監聽該控制元件的scroll狀態;formatter用於格式化顯示該控制元件中的value。下面逐一介紹這幾個介面:
1、:其函式public void onValueChange(NumberPicker picker, int oldVal, int newVal) ;oldVal前一個選中的值,newValue當前選中的值。
2、:其內部有三種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、: 格式化顯示數字,例如0—23格式化為00 — 23 。具體的格式在format函式中規定,如下程式碼:
value值在0—23之間,小於10的數在前面加上“0”。public String format(int value) { String tmpStr = String.valueOf(value); if (value < 10) { tmpStr = "0" + tmpStr; } return tmpStr; }
接下來就是一步一步完成上述功能:
1、建立佈局檔案widget_number_picker_layout.xml
2、建立activity——WidgetNumPickerActivity<?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>
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;
}
}
}
其中一個狀態的效果圖如下:
在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。