今儿突然发现在EditText里面设置属性android:inputType="numberDecimal"在某些三星手机(s5830i)导致其原生输入法奔溃的问题.若是设置属性为android:inputType="number"则不会崩溃.原来这些输入法调用不支持浮点数的,仅能支持整数的.  

什么破输入法啊! 个别其他手机自带输入法也有这个问题,例如华为的。

因为不能使用系统自带过滤非浮点数的功能,若是自己写的话,需要考虑很多问题。

记下来如下代码方便以后使用。

TextEdit设置监听

过滤 空串,非浮点数,开头为0(例如 0123.11)的情况

String regEx = "^[0-9]+\\.{0,1}[0-9]{0,2}$";// 正则表达式 输入只能为浮点数,后面为2位小数字

priceEt.addTextChangedListener(new TextWatcher() {@Overridepublic void onTextChanged(CharSequence s, int start, int before,int count) {if (s != null) {GSLog.e(HomeActivity.class, "onTextChanged:当前的CharSequence"+ s.toString() + "   start: " + start+ "     before: " + before + "   count:" + count);if (".".equals(priceEt.getText().toString().trim())|| !(Pattern.matches(regEx, priceEt.getText().toString().trim()))|| 0 == Double.parseDouble(priceEt.getText().toString().trim())) {String str = priceEt.getText().toString().trim();if (priceEt.getText().toString().length() >= 1) {priceEt.setText(str.substring(0, priceEt.getText().toString().length() - 1));                                                                                                  priceEt.setSelection(priceEt.getText().toString().length());}}}}@Overridepublic void beforeTextChanged(CharSequence s, int start, int count,int after) {}@Overridepublic void afterTextChanged(Editable s) {}});
xml文件:

<EditText                            android:id="@+id/gaswear_et_money"                            style="@style/font_gaswear_black_2"                            android:layout_width="@dimen/gaswear_tv_width"                            android:layout_marginLeft="@dimen/gaswear_tv_marginLeft"                            android:gravity="center"                            android:background="@null"                            android:singleLine="true"                            android:digits="0123456789."                            android:imeOptions="actionNext"                            android:maxLength="7" />



若是动态去写的EditText,没有xml文件,所以导致没办法在代码里限制仅仅允许输入的字符。没办法使用android:digits 这样的属性去过滤

下面是代码中动态添加EditText,进行字符过滤的解决办法。

et_GasPrice.setFilters(new InputFilter[] {new InputFilter() {   public CharSequence filter(CharSequence src, int start, int end, Spanned dst, int dstart, int dend) {  if(src!=null && src.length() >= 5 ){return "";}if(src!=null ){str = src.toString().trim();if(!".".equals(str) && !Utils.isNumberic(str) && !(Pattern.matches(regEx, str))){str = "" ;}} return str;      }} });  





项目开发到2.0了,产品经理都换了5个了,新产品经理还在纠结这个问题。最后一致通过,之前的设计很**

现在解决方案是: 获取异常的手机,遇到该手机就特殊处理。

下面这个方法是遇到GT-s5830i 就切换成字符型输入法

private void changeInputType() {//获取当前手机型号String model = CommonUtils.getModel();//1GSLog.e(GasWearActivityF.class, "当前手机型号:  "+model);if(model!=null&&model.equalsIgnoreCase("GT-S5830i")){moneyEt.setInputType(EditorInfo.TYPE_CLASS_TEXT);priceEt.setInputType(EditorInfo.TYPE_CLASS_TEXT);mileageEt.setInputType(EditorInfo.TYPE_CLASS_TEXT);}}


更多相关文章

  1. Android 输入法框架流程整理
  2. android调用webservice方法,参数和返回值都用字符串
  3. android 发送短信 判断号码规则 判断字符数70
  4. 加载时不直接弹出输入法
  5. android 修改输入法中拼写检测默认值
  6. Android和Java判断字符串是否是中文
  7. android中如何屏蔽长按menu出现的输入法
  8. Android开发_在Android Studio中搜索项目中出现过的字符串

随机推荐

  1. Android(安卓)全退出
  2. Android: Android(安卓)Reboot流程
  3. Android录音应用
  4. TextView 不用 ScrollViewe 也可以滚动
  5. Android构建音频播放器教程(四)
  6. 在Android(安卓)Studio中使用Android(安
  7. android学习之textView布局文件
  8. Android(安卓)WebView学习
  9. EditText 总是被软键盘遮挡
  10. Android(安卓)总结1