`
喧嚣求静
  • 浏览: 573635 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

android 开发,editText中控制金额字段输入小数点前面位数

 
阅读更多
editText.setInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL);
		//默认控制输入10位数,小数点前7位,后2位,小数一位,共10位
		InputFilter[] filters={new CashierInputFilter(10),new InputFilter.LengthFilter(10)};
		
		editText.setFilters(filters);




----------------------------------------------

/**
 * @author liudong</br>
 * 描述:EditText输入框中过滤输入指定金额格式</br>
 * 1.小数点前7位数</br>
 * 2.小数点后2位数
 * 
 * */
public class CashierInputFilter implements InputFilter {
	
	 private Pattern mPattern;
	 //输入的最大金额
	 private  final int MAX_VALUE = Integer.MAX_VALUE;
	 
	 //小数点后的2位数
	 private  final int POINTER_AFTER_LENGTH = 2;
	 
	 //小数点前的7位数
     private   int POINTER_BEFORE_LENGTH = 7;

	 private  final String POINTER = ".";

	 private static final String ZERO = "0";

	 public CashierInputFilter() {
	        mPattern = Pattern.compile("([0-9]|\\.)*");
	 }
	 
	 public CashierInputFilter(int _maxLength) {
	        mPattern = Pattern.compile("([0-9]|\\.)*");
	        POINTER_BEFORE_LENGTH=_maxLength-POINTER_AFTER_LENGTH-1;
	        
	 }


	 /**
	     * @param source    新输入的字符串
	     * @param start     新输入的字符串起始下标,一般为0
	     * @param end       新输入的字符串终点下标,一般为source长度-1
	     * @param dest      输入之前文本框内容
	     * @param dstart    原内容起始坐标,一般为0
	     * @param dend      原内容终点坐标,一般为dest长度-1
	     * @return          输入内容
	     */

	@Override
	public CharSequence filter(CharSequence source, int start, int end,
			Spanned dest, int dstart, int dend) {
		
		String sourceText = source.toString();
        String destText = dest.toString();

        //验证删除等按键
        if (TextUtils.isEmpty(sourceText)) {
                return "";
        }

        Matcher matcher = mPattern.matcher(source);
        //已经输入小数点的情况下,只能输入数字
        if(destText.contains(POINTER)) {
            if (!matcher.matches()) {
                    return "";
            } else {
                if (POINTER.equals(source)) {  //只能输入一个小数点
                    return "";
                }
            }

           
            int index = destText.indexOf(POINTER);
            //验证小数点精度,保证小数点后只能输入两位
            int afterLength = dend - index;
            
           // 输入后,修改控制不了,//验证小数点精度,保证小数点前位数
            
           if(dstart==POINTER_BEFORE_LENGTH && index==POINTER_BEFORE_LENGTH)
            {
               return dest.subSequence(dstart, dend);
            	
            }
            
            
            //验证小数点精度,保证小数点后只能输入两位
            if (afterLength > POINTER_AFTER_LENGTH) {
                return dest.subSequence(dstart, dend);
            }
           
            
        } else {
            //没有输入小数点的情况下,只能输入小数点和数字,但首位不能输入小数点和0
            if (!matcher.matches()) {
                return "";
            } else {
            	 //验证小数点精度,保证小数点前只能输入7位
                
                if(dstart==POINTER_BEFORE_LENGTH){
                	if(sourceText.contains(POINTER))
                	  return dest.subSequence(dstart,dend)+ sourceText+ZERO+ZERO;
                	else
                	  return dest.subSequence(dstart,dend)+POINTER+ZERO+ZERO;
                }
                if ((POINTER.equals(source) || ZERO.equals(source)) && TextUtils.isEmpty(destText)) {
                    return ZERO+POINTER+ZERO+ZERO;
                }
            }
        }

        //验证输入金额的大小
        double sumText = Double.parseDouble(destText + sourceText);
        if (sumText >=MAX_VALUE) {
            return dest.subSequence(dstart, dend);
        }

        return dest.subSequence(dstart, dend) + sourceText;
    }


}

 

0
0
分享到:
评论

相关推荐

    Android限制只能输入中文的EditText

    EditText是Android中的一个视图组件,它允许用户输入文本。它继承自TextView,提供了更多的交互功能,如文本编辑、文本选择等。 2. **监听输入内容**: 要监听EditText的输入,我们需要使用`...

    Android的edittext在弹出框中实现输入自动千分位分隔和金额限制

    在Android开发中,`EditText` 是一个非常常用的控件,用于接收用户输入的数据。在一些特定的场景下,如财务应用或购物应用,我们可能需要对用户输入的金额进行格式化,使其显示为带有千分位分隔的样式,并且限制输入...

    Android EditText限制输入整数和小数的位数的方法示例

    Android EditText 限制输入整数和小数的位数是 Android 应用开发中常见的需求。为了满足这种需求,我们可以使用 TextWatcher 接口来监听EditText 的输入,并对输入的内容进行限制。在本文中,我们将介绍如何使用 ...

    Android自定义EditText,实现分割输入内容效果

    本篇将详细讲解如何在Android中自定义EditText,实现分割输入内容的效果。 首先,理解这个效果:通常,EditText会连续显示用户输入的文本,而“分割输入内容”的效果可能是指在用户输入特定字符后自动添加分隔符,...

    Android开发之EditText字符串过滤器InputFilter

    在Android开发中,EditText是用户输入数据的常见组件,它允许用户输入文本并显示在界面上。然而,有时候我们希望对用户的输入进行限制,比如只允许输入数字、字母或者特定格式的数据,这时我们就需要用到EditText的...

    Android-AndroidEditText多行文本输入字数统计限制数量

    在Android开发中,`EditText`组件是用于接收用户输入文本的关键元素。在许多应用场景中,我们可能需要对用户的输入进行一些限制,比如限制输入的字数。本篇将深入探讨如何实现`Android EditText`的多行文本输入字数...

    android 输入框EditText禁止输入Emoji表情符

    本文将详细讲解如何在Android中禁止EditText接收并显示Emoji表情。 首先,我们需要了解Emoji的本质。Emoji是Unicode编码的一种,它在UTF-8编码体系中占有一定的位置。因此,我们可以通过检查输入字符的Unicode值来...

    Android开发EditText属性

    ### Android开发中的EditText属性详解 #### 一、引言 在Android应用开发中,`EditText`作为用户输入信息的关键组件之一,其丰富的属性为开发者提供了极大的灵活性和定制性。通过合理配置这些属性,可以实现多样化...

    android_Edittext 两位小数输入,可用于价格/计算器

    这就是如何在Android中创建一个能够接受两位小数输入的`EditText`组件,适用于价格或计算器应用。这个功能通过自定义过滤器和监听器实现了对用户输入的控制,保证了数据的准确性和格式一致性。在实际项目中,可以...

    -android搜索历史记录提示,在edittext输入框中输入,会在本地保存,下次输入会自动提示.rar

    首先,我们需要了解EditText是Android中的一个视图组件,用户可以通过它输入文本。当用户在EditText中输入内容时,我们可以监听输入事件,捕获用户的输入并保存为历史记录。Android提供了许多API来帮助我们实现这一...

    Android EditText 正则表达式 限制数字、字母、字符 输入 密码框

    在Android开发中,`EditText`是用于用户输入文本的基本组件,常常用于收集用户的数据,如密码、邮箱地址等。为了确保用户输入的数据符合特定格式,我们可以利用正则表达式(Regular Expression)进行验证。正则...

    android EditText禁止输入法表情

    在Android开发中,`EditText` 是一个非常常用的控件,用于接收用户输入的文字。然而,在当前的移动设备环境中,许多用户喜欢使用各种表情符号来增强沟通的趣味性。但有些场景下,例如登录、注册或者数据录入等,我们...

    android EditText跟随键盘弹出,背景不会被顶上去

    在Android开发中,`EditText` 是一个常用的组件,用于接收用户输入文本。然而,当`EditText`位于屏幕底部,用户点击输入时,软键盘弹出可能会遮挡到`EditText`,给用户带来不便。为了解决这个问题,我们需要实现`...

    Android 点击EditText编辑框清除hint预设字

    在Android开发中,`EditText` 是一个非常常用的控件,用于接收用户输入的文字。`Hint` 是`EditText` 的一个重要属性,它会在输入框内显示提示文字,帮助用户理解应该输入什么内容。当用户开始输入时,这个提示文字...

    Android 监听EditText变化

    在Android开发中,`EditText`是用户输入文本的视图组件,经常用于收集用户的文本信息。为了能够实时响应`EditText`中的文本变化,开发者通常会使用`TextWatcher`监听器。`TextWatcher`是一个接口,提供了三个方法,...

    android EditText在输入的时候输入框上方现悬浮文字提示

    在Android开发中,`EditText`是用于用户输入文本的基本组件,常常用于登录、注册或表单填写等场景。为了提供更好的用户体验,有时我们希望在用户输入时,`EditText`上方显示一个悬浮的文字提示,这种功能被称为`...

    android的EditText的使用

    在Android中,我们可以使用`FocusChangeListeners`来监听`EditText`的焦点变化。当`EditText`失去焦点时,会触发`onFocusChange()`方法: ```java editText.setOnFocusChangeListener(new View....

    Android中ListView多个Edittext获取输入内容.rar

    本资源"Android中ListView多个Edittext获取输入内容.rar"显然是为了帮助开发者解决这个问题。 首先,我们来了解ListView的工作原理。ListView通过复用convertView来提高性能,即滚动时,一些不再屏幕内的Item视图会...

Global site tag (gtag.js) - Google Analytics