当前位置:操作系统 > 安卓/Android >>

我的Android笔记(六)——分享一个自己的NumberPicker

(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


[java] view plaincopyprint?
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); 
    } 
 
    private OnMyNumberSetListener mListener; 
 
    public NumberPickerDialog(Context context, OnMyNumberSetListener listener, 
            String number, int mode) { 
        super(context); 
        this.context = context; 
        this.mListener = listener; 
        this.initNumber = number; 
        this.mode = mode; 
    } 
 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.number_picker_layout); 
        setTitle("Number Picker"); 
 
        txt_input = (TextView) findViewById(R.id.txt_inputNumber); 
 
        txt_input.setText(String.valueOf(initNumber)); 
 
        btn_1 = (Button) findViewById(R.id.btn_1); 
        btn_2 = (Button) findViewById(R.id.btn_2); 
        btn_3 = (Button) findViewById(R.id.btn_3); 
        btn_4 = (Button) findViewById(R.id.btn_4); 
        btn_5 = (Button) findViewById(R.id.btn_5); 
        btn_6 = (Button) findViewById(R.id.btn_6); 
        btn_7 = (Button) findViewById(R.id.btn_7); 
        btn_8 = (Button) findViewById(R.id.btn_8); 
        btn_9 = (Button) findViewById(R.id.btn_9); 
        btn_0 = (Button) findViewById(R.id.btn_0); 
        btn_clear = (Button) findViewById(R.id.btn_clear); 
        btn_dot = (Button) findViewById(R.id.btn_dot); 
        btn_ok = (Button) findViewById(R.id.ok); 
        btn_cancel = (Button) findViewById(R.id.cancel); 
        btn_1.setOnClickListener(this); 
        btn_2.setOnClickListener(this); 
        btn_3.setOnClickListener(this); 
        btn_4.setOnClickListener(this); 
        btn_5.setOnClickListener(this); 
        btn_6.setOnClickListener(this); 
        btn_7.setOnClickListener(this); 
        btn_8.setOnClickListener(this); 
        btn_9.setOnClickListener(this); 
        btn_0.setOnClickListener(this); 
        btn_clear.setOnClickListener(this); 
        btn_dot.setOnClickListener(this); 
        btn_ok.setOnClickListener(this); 
        btn_cancel.setOnClickListener(this); 
        setCancelable(false); 
    } 
 
    private void setText(String num) { 
        String nowNumber = txt_input.getText().toString(); 
        String newNumber = ""; 
 
        /* 限制最多位数为8 */ 
        if (nowNumber.length() >= 8) {

补充:移动开发 , Android ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,