在用户昵称的输入时,限定8个字符,本意是在输入超过8个时候,页面toast一个提示,就是下面的TextWatcher的监听,在afterTextChanged中处理。

原bug:huawei MT2-C00提示数组越界crash,其他手机如红米小米荣耀HtcD820t都没问题。

 @Override
public void afterTextChanged(Editable s) {
editStart = mUsernameEditText.getSelectionStart();
editEnd = mUsernameEditText.getSelectionEnd();
if (temp.length() > 8) {
s.delete(editStart - 1, 0, editEnd);
showToast("昵称最多为8个字符");
int tempSelection = editStart;
mUsernameEditText.setText(s);
mUsernameEditText.setSelection(s.length());
}
}
});

s.delete(editStart - 1, 0, editEnd);这一句的-1有问题,

好吧,原来这样的写法确实存在越界的问题,增加一个和0的比较,但是parter说TextWatcher的监听在部分机型:huawei MT2-C00 Android4.4.2,以及三星(三星note3 Android4.4.2)的某些手机会报错,中英文混合输入等情况的判断并不是想要的结果,具体的原因和解决方法没有找到。

只能删掉这个TextWatcher

         // 昵称最多为8个字符
mUsernameEditText.addTextChangedListener(new TextWatcher() {
private CharSequence temp;
private int editStart;
private int editEnd; @Override
public void beforeTextChanged(CharSequence s, int arg1, int arg2, int arg3) {
temp = s;
} @Override
public void onTextChanged(CharSequence s, int arg1, int arg2, int arg3) {
} @Override
public void afterTextChanged(Editable s) {
editStart = mUsernameEditText.getSelectionStart();
editEnd = mUsernameEditText.getSelectionEnd();
if (temp.length() > 8) {
s.delete(Math.max(editStart - 1, 0), editEnd);
showToast("昵称最多为8个字符");
int tempSelection = editStart;
mUsernameEditText.setText(s);
mUsernameEditText.setSelection(s.length());
}
}
});

退而求其次,直接限制输入长度,不toast提示了,直接忽略第8个字符之后的输入。

// 昵称最多为8个字符
mUsernameEditText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(8)});

以上只是简单的字符数目判断,不区分特殊字符和中英文,中英文每个字都算作一个字符。

Android机型太多,还是保证了安全,牺牲了体验。

以后有条件的话,huawei MT2-C00 Android4.4.2,以及三星(三星note3 Android4.4.2)要run一遍。

最新文章

  1. Springmvc的跳转方式
  2. SequoiaDB 系列之四 :架构简析
  3. C/C++中的可变参函数
  4. [Mugeda HTML5技术教程之11]Mugeda API简介
  5. haproxy image跳转 haproxy匹配 匹配到了就停止,不会继续往下匹配
  6. react系列从零开始-react介绍
  7. [2014-09-21]如何在 Asp.net Mvc 开发过程中更好的使用Enum
  8. Elasticsearch 的分页报错 result window is too large
  9. 七行代码开始flask
  10. Linux中的shell到底是什么?
  11. 关于eclipse安装Genymotion插件的方法
  12. android 热修补之andfix实践
  13. Winform消息与并行的形象比喻
  14. 小学生四则运算APP核心代码公布
  15. QString 的用法
  16. 获取数据库表中自增长最新的id
  17. pycharm和anaconda
  18. 数据库ACID属性
  19. quartz 任务时间调度入门使用
  20. NC入门笔记

热门文章

  1. 【转】浅析terminal创建时ptmx和pts关系
  2. SMO要点总结
  3. Python学习笔记3-文件的简单操作
  4. Linux学习之十四、管线命令
  5. C#中log4net使用方法(一)
  6. D3学习教程
  7. SVN导出增量包的方法
  8. Weblogic 部署注意事项
  9. 内存管理——Cocos2d-x学习历程(五)
  10. can't find which disk is full