Android EditText关于弹出指定软键盘并输入允许输入特殊字符的处理

好吧,有这么一个奇葩的需求,一个输入输入框中要输入金额,并对输入金额进行效验

那么大家应该都会做吧0.0001等等。 

我们的需求是

1、点击弹出软键盘并且是数字键盘。

2、文本框中要带入¥符号,并且是自动带入,输入的时候¥跟着金额往前走,如¥1000.01,但是光标不能删除¥也不能移动到¥前面。


我一开始想法想法是当然设置inputType=numberDecimal啊

然后在afterTextChanged中把¥加上,我去渣渣,根本加不进去。因为inputType里做了限制了。

后来想到了不设置inputType直接设置InputFilter

public static String yuan_string = Res.getString(R.string.sum_type);//就是符号¥,因为直接在代码中设置¥会出现¥符号出现编码问题
public static class MoneyFilter implements InputFilter {
   public static final Pattern PATTERN_MONEY_INPUT = Pattern.compile("[0-9 "+yuan_string+"]*");

   @Override
   public CharSequence filter(CharSequence source, int start, int end, Spanned dest,
                              int dstart, int dend) {
      if (PATTERN_MONEY_INPUT.matcher(source).matches()) {
         //在这里面做过滤,比如加.¥空格等 这里就不做过滤了直接返回source。
         return source;
      } else {
         return "";
      }
   }
}

哈哈,果然可以输入了。

结果马上打脸了。问题是你他没有弹出数字键盘啊!

那咋搞

google还是救了我一下

setKeyListener(new NumberKeyListener() {
   @NonNull
   @Override
   protected char[] getAcceptedChars() {
      return new char[]{'0','1','2','3','4','5','6','7','8','9',yuan_char,' '};
   }

   @Override
   public int getInputType() {
      return InputType.TYPE_CLASS_NUMBER;
   }
});

getAcceptedChars是允许输入的char字符。

getinputType就是传统的inputType设置完这个根本就不用设置InputFilter了,因为在NumberKeyListener中已经自己实现了,并且可以弹出数字键盘。

然后至于¥的位置及过滤都在afterTextChanged里面做,这里就不做说明了,大家应该都会。

还有一种简单的方法,就是放一个TextView就只是一个¥,控制显示隐藏。不过这样做太不优雅了。

另外这个KeyListener还有多种实现方式 大家也可以看看。

剩下的就是在onSelectionChanged中进行光标位置的监听和设置了。

onSelectionChanged
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值