(PS:其实不是自己的,只是我修改自别人的开源代码的,这里说“自己的”只是为了区别Android3.0以后系统自带的NumberPicker类)
Android3.0增加了一个NumberPicker类,可用于数字的获取。但是目前我们的应用一般都至少要兼容到2.1,所以要用NumberPicker就很纠结了。
我在写的一个应用要用到金钱的输入,之前的做法是用一个EditText,限制内容为数字,当点击时会调用系统默认输入法的数字键盘,但是总感觉有时候输入法的界面看起来很突兀,跟程序的风格不搭,于是萌生了自己写一个数字输入类的想法。
经过google,发现了一个开源项目http://code.google.com/p/taketoma-android-number-picker/,经过修改,实现了自己想要的功能。
在NumberPickerDialog的setText方法中可以很方便的修改限制条件,使其符合各种要求,如原版的代码就是对最大值和最小值的限定。另外原版的代码限制为整数,我修改成了String,以使其更灵活一些。
我修改后的代码demo——
运行效果图:
功能类NumberPickerDialog.java
- package com.android.picker;
- import android.app.Dialog;
- import android.content.Context;
- import android.os.Bundle;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- import android.widget.TextView;
- public class NumberPickerDialog extends Dialog implements OnClickListener {
- Button btn_ok;
- Button btn_cancel;
- TextView txt_input;
- TextView txt_rangeMin;
- TextView txt_rangeMax;
- Button btn_1;
- Button btn_2;
- Button btn_3;
- Button btn_4;
- Button btn_5;
- Button btn_6;
- Button btn_7;
- Button btn_8;
- Button btn_9;
- Button btn_0;
- Button btn_clear;
- Button btn_dot;
- Context context;
- String initNumber;
- int mode;
- public interface OnMyNumberSetListener {
- /**
- * 数字被设定之后执行此方法
- *
- * @param number
- * 当前文字框中字符串
- * @param mode
- * 可用以标识调用者
- */
- void onNumberSet(String number, int mode);
- }