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

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

    @Overrideprotected 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) {return;        }

/* 限制为两位小数 */int dotSite = nowNumber.indexOf(".");if (dotSite > 0 && dotSite + 2 < nowNumber.length()) {return;        }

if (!num.equals(".")) {// 输入不为小数点            if (nowNumber.equals("") || nowNumber.equals("0")) {                newNumber = String.valueOf(num);            } else {                newNumber = nowNumber.concat(String.valueOf(num));            }        } else {// 输入小数点            if (nowNumber.equals("") || nowNumber.contains(".")) {// 当前值为空或者已包含小数点时不执行操作                return;            } else {                newNumber = nowNumber.concat(".");            }        }        txt_input.setText(newNumber);    }

private void deleteText() {        txt_input.setText("");    }

    @Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.ok:            String number = txt_input.getText().toString();if (number.endsWith(".")) {                number = number.substring(0, number.length() - 1);            }            mListener.onNumberSet(number, mode);            dismiss();break;case R.id.cancel:            dismiss();break;case R.id.btn_0:            setText("0");break;case R.id.btn_1:            setText("1");break;case R.id.btn_2:            setText("2");break;case R.id.btn_3:            setText("3");break;case R.id.btn_4:            setText("4");break;case R.id.btn_5:            setText("5");break;case R.id.btn_6:            setText("6");break;case R.id.btn_7:            setText("7");break;case R.id.btn_8:            setText("8");break;case R.id.btn_9:            setText("9");break;case R.id.btn_dot:            setText(".");break;case R.id.btn_clear:            deleteText();break;        }    }}

NumberPickerDemoActivity.java

package com.android.picker;

import com.android.picker.R;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.TextView;

public class NumberPickerDemoActivity extends Activity {

private TextView textView1;private Button button1;

    @Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);        setContentView(R.layout.main);

        textView1 = (TextView) findViewById(R.id.text1);        button1 = (Button) findViewById(R.id.button1);        button1.setOnClickListener(new View.OnClickListener() {public void onClick(View view) {                showNumberPicker(textView1.getText().toString(), 0);            }        });    }

private void showNumberPicker(String number, int mode) {        String nowNumber = "0";if (!number.equals("")) {            nowNumber = number;        }new NumberPickerDialog(this, listener, nowNumber, mode).show();    }

private NumberPickerDialog.OnMyNumberSetListener listener = new NumberPickerDialog.OnMyNumberSetListener() {        @Overridepublic void onNumberSet(String number, int mode) {            textView1.setText(number);        }    };}

xml比较多,就不贴了,完整的demo项目可在这下载:http://files.cnblogs.com/shanzei/_NumberPickerDemo.zip

原文:http://blog.csdn.net/barryhappy/article/details/7363230#

转载于:https://www.cnblogs.com/shanzei/archive/2012/04/06/2434708.html

自己的数字选择控件NumberPicker相关推荐

  1. android numberpicker 自定义,Android的自定义数字Picker控件-NumberPicker使用方法

    android-numberpicker是github的一个项目,提供了安卓中的自定义数字拾取控件,它的效果如图所示: 应用该控件也非常简单,使用如下几步即可: 1.从github上下载该控件,地址为 ...

  2. 数字选择控件TimeDragPicker

    这是在网上找的,效果挺好的 新建类 TimeDragPicker  继承自RelativeLayout package com.example.test;import java.util.Arrays ...

  3. 选择控件— UI组件系列

    重点 (Top highlight) The word "toggle" is a reference to a switch with a short handle that a ...

  4. html中数字输入框,HTML “input number数字”输入控件简介说明

    摘要: 下文讲述html5中数字–输入控件的简介说明,如下所示: input type='number' 数字 输入控件简介说明 input type='number'功能: 当我们在文本域中使用ty ...

  5. 【仿汽车之家】价格区间选择控件

    仿照汽车之家iOS客户端"找车"栏目的价格区间选择控件,最终实现效果如下: 一.界面实现 *根据屏幕大小以及刻度的大小,宏定义需要用到的一些值 #define SCREENW [U ...

  6. 使用sui实现的选择控件【性别、日期、省市级联】

    使用sui mobile做的选择控件,其中sm.js有修改,增加自定义api,详情请看index.html的注释,不多说了,上代码 <!DOCTYPE html> <html> ...

  7. android double比较大小吗,Android双向选择控件DoubleSeekBar使用详解

    本文实例为大家分享了Android双向选择控件DoubleSeekBar的使用方法,供大家参考,具体内容如下 先看效果图 1.DoubleSlideSeekBar public class Doubl ...

  8. altas(ajax)控件(二十三):等级选择控件Rating

    一.      简介      等级选择控件Rating提供了一种全新的方式来进行等级选择,在以往的web上我们只能通过使用特殊字符"☆"来表达等级,有了等级选择控件Rating我 ...

  9. 部门选择控件源代码公布

    为了答谢大家对无须迭代两个循环完成树结构构建的支持特公布这两天新写的部门选择控件源代码,该控件最早是用一个用户控件实现数据调用采用Linq界面采用AtlasControlToolkit PopupCo ...

最新文章

  1. 兄弟们,TechEd见!
  2. 卸载破解的Navicat!操作所有的数据库靠它就够了!
  3. AspectJ和Spring AOP(java动态代理和CGLIB)简单介绍
  4. 数据结构之B树与B+树
  5. postman面试_Postman 收费太贵了,我决定用 Postwoman。。。
  6. qt 快速按行读取文件_这是知识点之Linux下分割文件并保留文件头
  7. PHP发送数据到指定方法,php通过header发送自定义数据方法_php技巧
  8. python爬虫案例——csdn数据采集
  9. python runner_【httprunner】自动化测试入门(基于python)!
  10. 记第三期“晋IT”分享成长沙龙
  11. 学完了C++语法之后该学什么??(网络基础篇)
  12. java将数据库数据转换成word文档并且生成pdf文件最后转换成对应的图片
  13. putty、xshell小键盘无法输入
  14. shell一站式攻略——history历史命令
  15. UPC10728:Imputation
  16. java.util.concurrent.TimeoutExceptiofor com.alibaba.nacos.shaded.io.grpc.stub.ClientCalls$GrpcFuture
  17. JS_SDK实现网站应用QQ登录功能-QQ互联(小白易懂)
  18. android(Google公司开发的操作系统)
  19. java程序员必读书目推荐
  20. 气象卫星_全国自动站资料文件名规定(1)

热门文章

  1. Oracle修改表列名与顺序的解决方案 (sql 修改列名)
  2. Confluence与Jira整合之统一用户管理
  3. Index of sql server
  4. Index of Oracle
  5. 可执行文件组成及内存映射
  6. 代理错误[WinError 10061]
  7. js 调用后台代码(比较实用,好记)
  8. Lighttpd日志打印格式
  9. ASP.NET在IIS7中上下文中不可用
  10. FastJsonUtils 需要fastjson