展会信息港展会大全

我的Android笔记(六)——分享一个自己的NumberPicker
来源:互联网   发布日期:2016-01-06 19:19:56   浏览:6869次  

导读:(PS:其实不是自己的,只是我修改自别人的开源代码的,这里说“自己的”只是为了区别Android3.0以后系统自带的NumberPicker类)Android3.0增加了一个NumberPi...

(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) {

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("");

}

@Override

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

}

}

}

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) {

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("");

}

@Override

public 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

[java] view plaincopyprint?

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;

@Override

public 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() {

@Override

public void onNumberSet(String number, int mode) {

textView1.setText(number);

}

};

}

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;

@Override

public 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() {

@Override

public void onNumberSet(String number, int mode) {

textView1.setText(number);

}

};

}xml比较多,就不贴了,完整的demo项目可在这下载:http://up.2cto.com/2012/0317/20120317111812824.zip

摘自狼的第二个小窝

赞助本站

人工智能实验室

相关热词: android开发 教程

AiLab云推荐
推荐内容
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港