众所周知EditView有个inputType 属性可以设置输入的类型。

如下设置,则只能输入数字:
android:inputType="number"
但是有时候需要自定义输入限制条件,比如第一位只能是“1”,一共11位,超过11位则无法输入,或者只允许输入小于5以下的数字等,则需要其他设置。Android中有三种方式来设置。

第一种:digits 属性

如下设置为:只能输入0-5之间的数字,且最多11位。
 <EditText
android:id="@+id/etDigits"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:digits="012345"
android:hint="通过digits设置"
android:inputType="number"
android:maxLength="11" />
PS:优点:简单方便;
      缺点:只能设置简单的限制,如果需要设置的比较复杂,如数字字母和某些特定字符则需要在digits中穷举出来。

第二种:TextWatcher设置

此方式也比较灵活,不错的方式。
 EditText etTextWatcher = (EditText) findViewById(R.id.etTextWatcher);
etTextWatcher.addTextChangedListener(new EditTextWatcher(etTextWatcher));
/**
* Created by xugang on 2016/6/23.
* 输入监听
*/
public class EditTextWatcher implements TextWatcher {
private EditText editText;
public EditTextWatcher(EditText editText) {
this.editText = editText;
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (s != null && s.length() > start) {
//输入判断规则
if (!RegularUtils.compare(s.toString().trim(), RegularUtils.LIMIT_PHONE_INPUT)) {
editText.setText(s.subSequence(0, s.length() - 1));
editText.setSelection(s.length() - 1);
}
}
}
@Override
public void afterTextChanged(Editable s) {
}
}

第三种:设置Filters,通过正则进行限制

传入正则规则即可,灵活性比较高。
 public static final String LIMIT_PHONE_INPUT = "^1\\d{0,10}$";//限制只允许输入首位为1的最多11位的数字
EditView etInputFilter = (EditView)findViewById(R.id.etInputFilter);
etInputFilter.setFilters(new EditInputFilter(LIMIT_PHONE_INPUT));
/**
* Created by xugang on 2016/6/22.
* EditView过滤器
*/
public class EditInputFilter implements InputFilter {
//
private String regular;
public EditInputFilter(String regular) {
this.regular = regular;
}
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
if (regular == null)
return source;
if (dstart == 0 && dend == 0 && TextUtils.isEmpty(source))
return null;
if (dstart == dend) {
//输入
StringBuilder builder = new StringBuilder(dest);
if (builder.append(source).toString().matches(regular)) return source;
else return "";
}
return source;
}
}

EditView 输入限制(软键盘限制)的更多相关文章

  1. input输入时软键盘回车显示搜索

    很多时候我们会看到输入法里面回车是搜索等字眼,今天我们就来实现这个效果 原本的效果: <form action=""> <input type="sea ...

  2. 与众不同 windows phone (24) - Input(输入)之软键盘类型, XNA 方式启动软键盘, UIElement 的 Touch 相关事件, 触摸涂鸦

    原文:与众不同 windows phone (24) - Input(输入)之软键盘类型, XNA 方式启动软键盘, UIElement 的 Touch 相关事件, 触摸涂鸦 [索引页][源码下载] ...

  3. Android - 隐藏EditText弹出的软键盘输入(SoftInput)

    隐藏EditText弹出的软键盘输入(SoftInput) 本文地址: http://blog.csdn.net/caroline_wendy 保持界面的整洁, 能够选择在进入界面时, 隐藏EditT ...

  4. 关于ios8模拟器不能输入中文问题以及软键盘不弹出问题

    在Xcode菜单栏中   Product->scheme->Edit Scheme->Options->Application Region改为中国,就可以输入中文了, 如果软 ...

  5. qt软键盘输入

      characterapplicationsignalqt输入法object 1.从QInputContext派生自己的InputContext类 ,例如: class MyInputPanelCo ...

  6. Android输入控件EditText和软键盘监听

    1. 跳转到新的页面自动软键盘显示情况: 在配置清单文件AndroidManifest.xml文件,对Activity的windowSoftInputMode属性进行设置. stateUnspecif ...

  7. Android EditView 阻止软键盘自动弹出

    最近再做一个查询内的小应用,界面最上面是一个EditText查询框,进行Activity后,总会弹起软键盘.这样就挡住了查询框下面的其他查询条件 控件,感觉很不友好.所以现在要做的就是在进入Activ ...

  8. Android软键盘调用及隐藏,以及获得点击软键盘输入的字母信息

    在Android提供的EditText中单击的时候,会自动的弹出软键盘,其实对于软键盘的控制我们可以通过InputMethodManager这个类来实现.我们需要控制软键盘的方式就是两种一个是像Edi ...

  9. 【Swift】- UITextField完成输入后关闭软键盘的几种方法

    总结了以下几种方式,欢迎补充  1,为空白区域绑定Touch Up Inside事件  2,重写touchesEnded方法  3,为TextField绑定Did End On Exit事件 1,点击 ...

  10. JS自动让手机调出软键盘,进行输入

    $('.search').click(function(){ $('input[type=text]').focus(); //让input框自动聚焦就可以让手机自动调出软键盘 });

随机推荐

  1. iOS - URL Scheme 操作

    推荐JLRoutes路由跳转 NSScanner 在寻找更加灵活的页面跳转和通知,我遇见了JLRoutes,从而学习使用URL Scheme来定义界面入口.以前从来没有使用过,不过很多大厂和流行的框架 ...

  2. windows多线程编程实现 简单(1)

    内容:实现win32下的最基本多线程编程 使用函数: #CreateThread# 创建线程 HANDLE WINAPI CreateThread( LPSECURITY_ATTRIBUTES lpT ...

  3. CSS3的filter用法

    最近到处看到有人在说CSS3的filter一直没有时间自己去测试这效果.今天终于抽出时间学习这个CSS3的Filter.不整不知道呀,一整才让我感到吃惊,太强大了.大家先来看个效果吧: 我想光看上面的 ...

  4. ecshop随机分类

    $get_categories_tree = get_categories_tree(); $smarty->assign('category_1', RandArray($get_catego ...

  5. zabbix监控Java 8080端口

    linux下端口和服务是对应的,Java进程启动时默认监听8080端口,如果服务挂掉则8080端口就没有了. lsof -i:8080 端口,如果没有任何的输出,说明该端口不在工作. 想在zabbix ...

  6. Bubble Cup 8 finals H. Bots (575H)

    题意: 简单来说就是生成一棵树,要求根到每个叶子节点上的路径颜色排列不同, 且每条根到叶子的路径恰有n条蓝边和n条红边. 求生成的树的节点个数. 1<=n<=10^6 题解: 简单计数. ...

  7. c++ 在windows下获取时间和计算时间差的几种方法总结

    http://blog.csdn.net/caimagic/article/details/50696609 我用的是GetTickCount(), 获取到的是毫秒.

  8. 《web全栈工程师的自我修养》读书笔记

    有幸读了yuguo<web全栈工程师的自我修养>,颇有收获,故在此对读到的内容加以整理,方便指导,同时再回顾一遍书中的内容. 概览 整本书叙述的是作者的成长经历,通过经验的分享,给新人或者 ...

  9. UvaLA 3938 "Ray, Pass me the dishes!"

                            "Ray, Pass me the dishes!" Time Limit: 3000MS   Memory Limit: Unkn ...

  10. 08-linux 其他知识

    linux其他知识点 1-防火墙- iptables原理 2- 本部分属于一步一步学习大数据系列之 Linux 的章节,欢迎订阅更多文章 更多内容请参考:一步一步学习大数据系列介绍