众所周知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. DOM(文档对象模型)

    1.定义: DOM是Document Object Model文档对象模型的缩写.是针对HTML和XML文档的一个API,通过DOM可以去改变文档. 例如:我们有一段HTML,那么如何访问第二层第一个 ...

  2. c# .Net并行和多线程编程之Task学习记录!

    任务Task和线程Thread的区别: 1.任务是架构在线程之上的,也就是说任务最终还是要抛给线程去执行. 2.任务跟线程不是一对一的关系,比如开10个任务并不是说会开10个线程,这一点任务有点类似线 ...

  3. vue.js开发环境搭建

    1.安装node.js(http://www.runoob.com/nodejs/nodejs-install-setup.html) 2.基于node.js,利用淘宝npm镜像安装相关依赖 在cmd ...

  4. SecureCRT上传和下载文件

    SecureCRT上传和下载文件(下载默认目录) SecureCR 下的文件传输协议有ASCII .Xmodem .Ymodem .Zmodem ASCII:这是最快的传输协议,但只能传送文本文件. ...

  5. C#可用的日出日落时间类

    一个现成代码的公共类库,复制下来作为一个类文件就可以调用了.一般不需要了解实现过程,各种数学公式太麻烦. 调用方法: SunTimeResult result = SunTimes.GetSunTim ...

  6. 仿浏览器TAB效果

    仿浏览器的Tag标签 这里先上个非常非常简陋的demo,没加CSS,我先把jquery的源码给全部搞通,在专心把这个功能给讲一下 <!doctype html> <html lang ...

  7. svn强制加注释才能提交

    进入库的hooks目录下 cp pre-commit.tmpl pre-commit 并对pre-commit加入运行权限 修改pre-commit内容如下 REPOS="$1" ...

  8. [译]你应该知道的4种JavaScript设计模式

    这里介绍下面这4种设计模式 Module Prototype Observer Singleton 每种模式有许多属性构成,在这我只强调一下几点: 1 Context: 在何种情况使用哪种模式? 2 ...

  9. 图解TCP/IP→第2章基础知识

    ####TCP.IP背景**关键词:ARPANET,UNIX,分组交换技术,*ARPANET(阿帕网),也是全球互联网的鼻祖.阿帕网的成功也充分证明了基于分组交换技术的通信方法的可行性.*20世纪70 ...

  10. [Storm] No data flows into bolt

    最近在HDP2.1的HBase环境中安装了一个Storm测试机器(单节点,JDK8),遇到了几个问题,记录下来. 尝试步骤 1. 使用和HBase一样HDP版本,直接安装Storm yum insta ...