Android实现EditText输入金额

EditText是Android中一个非常实用的控件,有很多InputType,可以来达到不同的输入效果,如下图:

比如,密码输入,数字输入等等。但是最近在项目中要实现EditText输入金额,金额的限制因素很多,比如,只能输入数字和小数点,首位不能输入0和小数点,小数点后面只能保留两位等等,这些仅仅用InputType是无法实现的,今天用InputFilter来实现。

1. 首先需要将EditText的InputType设置成如下格式,保证用户只能输入小数点和数字

android:inputType="numberDecimal"或者setInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL)

2. 自定义InputFilter,代码如下:

CashierInputFilter.Java

package com.xylpay.utils;
import android.text.InputFilter;
import android.text.Spanned;
import android.text.TextUtils;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
 * Created by Jackie on 2016/1/30.
 * 过滤用户输入只能为金额格式
 */
public class CashierInputFilter implements InputFilter {
  Pattern mPattern;
  //输入的最大金额
  private static final int MAX_VALUE = Integer.MAX_VALUE;
  //小数点后的位数
  private static final int POINTER_LENGTH = 2;
  private static final String POINTER = ".";
  private static final String ZERO = "0";
  public CashierInputFilter() {
    mPattern = Pattern.compile("([0-9]|\\.)*");
  }
  /**
   * @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 length = dend - index;
      if (length > POINTER_LENGTH) {
        return dest.subSequence(dstart, dend);
      }
    } else {
      //没有输入小数点的情况下,只能输入小数点和数字,但首位不能输入小数点和0
      if (!matcher.matches()) {
        return "";
      } else {
        if ((POINTER.equals(source) || ZERO.equals(source)) && TextUtils.isEmpty(destText)) {
          return "";
        }
      }
    }
    //验证输入金额的大小
    double sumText = Double.parseDouble(destText + sourceText);
    if (sumText > MAX_VALUE) {
      return dest.subSequence(dstart, dend);
    }
    return dest.subSequence(dstart, dend) + sourceText;
  }
}

使用方法如下:

(0)

相关推荐

  • Android EditText实现输入金额类型详解

    前言 众所周知,Android中的editText默认的属性里面是没有金额类型的,所以要实现这个功能我们就必须自己动手丰衣足食.下面话不多说了,来一起看看详细的介绍吧. 一.EditText只允许输入数字.小数点. 首先要知道金额有两部分构成,整数部分和小数部分,要实现只输入数字和小数点很简单.自己查能很容易查到. 把type设置成InputType.TYPE_NUMBER_FLAG_DECIMAL|InputType.TYPE_CLASS_NUMBER 就行 那这样做有个缺点,小数部分可以有很

  • Android实现EditText输入金额

    EditText是Android中一个非常实用的控件,有很多InputType,可以来达到不同的输入效果,如下图: 比如,密码输入,数字输入等等.但是最近在项目中要实现EditText输入金额,金额的限制因素很多,比如,只能输入数字和小数点,首位不能输入0和小数点,小数点后面只能保留两位等等,这些仅仅用InputType是无法实现的,今天用InputFilter来实现. 1. 首先需要将EditText的InputType设置成如下格式,保证用户只能输入小数点和数字 android:inputT

  • Android实现 EditText输入手机号空格功能

    Android EditText输入手机号空格 开发需求是在登录页面的手机EditText中间插入空格,让用户看起来方便点, 130 1234 4567,中间第4个数字和第5个数字空格前面加空格. 要求还有一点,就是除了输入要加入空格,从其他地方复制过来的电话号码,没有空格的,也要在粘贴后,自动补全空格. 思路:重写TextWatcher,每次EditText内容变化,都判断内容是否符合要求. @Override public void afterTextChanged(Editable s)

  • Android中Edittext设置输入条件

    一.应用场景 之前做商城应用时,会有对用户资料的设置情况进行限制,如下: (1)用户邮箱,应当只允许输入英文字母,数字和@.两个符号, (2)用户手机,应当只能输入数字,禁止输入其他字符. (3)用户密码,应当不能输入空格以及中文字符等. 二.解决方案 针对用户邮箱以及用户手机,有以下两种解决方案: (1)EditText中的android:digits属性: 它表示EditText能够接受的字符集合.通过配置此属性,就可以实现只允许输入指定的字符.这里列举上述三种场景下的android:dig

  • 全面解析Android中对EditText输入实现监听的方法

    在 Android design support 包中提供了一种在输入不合适字符时一直显示的提示方式来显示,现在已经开始在更多的应用上被使用了:这些 Android app 在显示他们的错误提示时采用的不同的方式常常让人感觉非常的不和谐. 即这个一直显示的错误消息是在 TextInputLayout 中的 EditText 周围的.这也是,作为一个奖励,提供了材料设计风格中,活泼的浮动标签在一个 APP 的用户体验中常常是最无聊的部分. 这里来讨论如何在你的输入表单上去创建一个通用的.可重用的组

  • Android中EditText+Button组合导致输入板无法收起的原因分析及解决办法

    在Android开发中,录入信息是最基本的操作,使用非常广泛. 但是Android对输入法弹出/收起的支持,并不是很好. 对弹出,提供了force方式和implicit方式,对输入却没有提供force方式. 可想而知,想弹能弹,想收不能收,这是多么的痛苦! 没有对输入法做任何处理的情况下,EditText输入后,点击Button一般会自动收起输入法. 若没有收起,那可能是布局上有一些问题,可以尝试在最外层添加scrollView. 笔者亲测在大部分情况下,嵌套scrollView是可行的. 如果

  • android同时控制EditText输入字符个数和禁止特殊字符输入的方法

    本文实例讲述了android同时控制EditText输入字符个数和禁止特殊字符输入的方法.分享给大家供大家参考.具体分析如下: 这里总结了三种方法如下: 方法一: 1. 引用两个命名空间: import android.text.TextWatcher; import android.text.Editable; 用于禁止特殊字符输入控制 定义EditText mEditText对象 2. 控制字符长度: 通过InputFilter过滤来实现字符长度控制,这样的好处是可以实现动态长度控制,而不是

  • Android中多个EditText输入效果的解决方式

    前言 在开发中,我们常常遇到这种情况 我们往往需要的是下面这种效果 但是如果把这些实现的代码写在Activity中会比较麻烦,影响代码美观 解决方法 于是就有了下面这个辅助类,禁用了按钮的点击事件和按钮的渐变色,可同时添加一个或者多个EditText /** * 文本输入辅助类,通过管理多个TextView或者EditText输入是否为空来启用或者禁用按钮的点击事件 */ public final class TextInputHelper implements TextWatcher { pr

  • Android 限制edittext 整数和小数位数 过滤器(详解)

    写了一个过滤器,根据需要限制edittext输入的整数和小数位,如下代码: package allone.verbank.apad.client.component; import android.text.InputFilter; import android.text.Spanned; /** * * @Title: ComponentDigitCtrlFilter.java * @Package allone.verbank.apad.client.component * @Descrip

  • Android实现EditText控件禁止输入内容的方法(附测试demo)

    本文实例讲述了Android实现EditText控件禁止输入内容的方法.分享给大家供大家参考,具体如下: 问题: android如何实现EditText控件禁止往里面输入内容? 修改版解决方法: EditText editText = (EditText) findViewById(R.id.editText1); editText.setKeyListener(null); 看到这个问题大家可能有点奇怪了,EditText的功能不就是往上面写入内容吗? 再者,如果真要禁止输入文本,在布局文件中

  • Android中EditText屏蔽第三方输入法表情的方法示例

    前言 众所周知如果用第三方的输入法的表情会给开发带来一定的麻烦,一般地像服务器上传的字符都是普通的字符,但是测试,就是狠狠得拿出搜狗输入法,点几个表情,那么问题就来了,要么是显示异常,要么是直接crash,但是有很少的部分机型,会支持,可能是第三方的ROM对Android 的TextView 做了一定的处理,所以,我们只能干掉该死的表情了. 具体的方法如下: 首先是在EditTextView 里面加入TextWatcher 在判断字符的变化时,就判断字符的类型,是否为字符,否则删除原来的字符,重

随机推荐