EditText 输入限制
来源:互联网 发布:国外js特效网站 开源 编辑:程序博客网 时间:2024/06/04 18:31
最近项目,遇到一个需求输入姓名只能是韩文(棒子的app),不能有任何的数字,特殊符号,英文字母。。。
本来以为很简单 查询一下韩文Unicode 范围”\uAC00-\uD7A3”
然后想当然的写一个正则 "^[\uAC00-\uD7A3]+$"
然后写一个Edittext 继承EditText
public class LimitEditText extends EditText { public LimitEditText(Context context) { super(context); } public LimitEditText(Context context, AttributeSet attrs) { super(context, attrs); } public LimitEditText(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } /** * 输入法 * @param outAttrs * @return */ @Override public InputConnection onCreateInputConnection(EditorInfo outAttrs) { return new mInputConnecttion(super.onCreateInputConnection(outAttrs), false); }}class mInputConnecttion extends InputConnectionWrapper implements InputConnection { public mInputConnecttion(InputConnection target, boolean mutable) { super(target, mutable); } /** * 对输入的内容进行拦截 * * @param text * @param newCursorPosition * @return */ @Override public boolean commitText(CharSequence text, int newCursorPosition) { // 只能输入汉字 if (!text.toString().matches("^[\uAC00-\uD7A3]+$") || text.toString().matches("^[0-9]*$")) { return false; } return super.commitText(text, newCursorPosition); } @Override public boolean sendKeyEvent(KeyEvent event) { return super.sendKeyEvent(event); } @Override public boolean setSelection(int start, int end) { return super.setSelection(start, end); }}
以为这样就ok了
测试还可以,但是用了一下go输入法 输入一切比较正常
但是如果在英文时候切换阿拉伯数字输入,就能把数字输入到edittext里
debug 发现在英文切数字之后 输入数字根本进入
@Override public boolean commitText(CharSequence text, int newCursorPosition) { // 只能输入汉字 if (!text.toString().matches("^[\uAC00-\uD7A3]+$") || text.toString().matches("^[0-9]*$")) { return false; } return super.commitText(text, newCursorPosition); }
这段方法
无解~~换方式
直接用原生的editText 设置一个Filters
userNameTxt.setFilters(new InputFilter[]{ new InputFilter() { @Override public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { String regex = "^[\uAC00-\uD7A3]+$"; boolean isKr = Pattern.matches(regex, source.toString()); if (!isKr) { return ""; } return null; } } });
这样 测试通过 可以过滤所有规则以外的。
如有不对的地方,欢迎大神指正。
完结 撒花~~
阅读全文
0 0
- EditText输入限制setFilters
- EditText限制文字输入
- EditText限制输入长度
- EditText限制输入字数
- 限制EditText输入字数
- android EditText输入限制
- android EditText输入限制
- EditText 字数限制输入
- EditText输入限制setFilters
- Android EditText 输入限制
- android Edittext 限制输入
- EditText 输入字数限制
- android EditText输入限制
- android EditText输入限制
- EditText输入限制
- EditText输入小数位限制
- EditText限制输入
- EditText限制输入类型
- 不要在公共接口中传递STL容器
- 空间数据库之空间索引
- putty提示Network error:Software caused connection abort
- sed -i 命令使用
- 大数据和人工智能未来发展趋势
- EditText 输入限制
- 大数据WEB阶段总结
- JAVA中super()的用法 转载自https://zhidao.baidu.com/question/275979670.html
- 软件测试 -- 比较一下黑盒测试、白盒测试、单元测试、集成测试、系统测试、验收测试的区别与联系
- (转)在Web项目中使用LiquiBase实现数据库自动更新
- 2030年全球有8亿人被机器人取代,如何成为不被机器人取代的人?
- MyBatis Mapper.xml配置 ResultMap
- 微信开发者工具下载地址
- Android GPS ——AGPS源码分析及配置