全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Android中Edittext设置输入条件

一、应用场景

之前做商城应用时,会有对用户资料的设置情况进行限制,如下:

(1)用户邮箱,应当只允许输入英文字母,数字和@.两个符号,

(2)用户手机,应当只能输入数字,禁止输入其他字符。

(3)用户密码,应当不能输入空格以及中文字符等。

二、解决方案

针对用户邮箱以及用户手机,有以下两种解决方案:

(1)EditText中的android:digits属性:

它表示EditText能够接受的字符集合。通过配置此属性,就可以实现只允许输入指定的字符。这里列举上述三种场景下的android:digits配置。

场景一:只允许输入数字 android:digits="0123456789"

场景二:只允许输入数字和英文字母

android:digits="0123456789abcdefghigklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"

场景三:只允许输入数字,英文字母和@.两个符号

 android:digits="0123456789abcdefghigklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ@."

使用android:digits属性有几个需要注意的地方:

android:digits属性是隐藏的,无法直接在EditText的可视化属性列表中找到。只能直接在XML布局文件中配置。当在XML中增加了这项配置后,才可以在EditText的可视化属性列表中找到。

android:digits属性中的字符顺序没有影响,例如只允许输入数字时,可以用android:digits="0123456789",也可以用android:digits="9876543210"。

android:digits属性中允许有重复字符,有重复字符在使用效果上没有影响。例如android:digits="aaaAAA"和android:digits="aA"效果是一样的。

android:digits属性只能设置允许输入哪些字符,不能设置禁止输入哪些字符,也就是说android:digits属性只能设置白名单,不能设置黑名单。

(2)EditText中的android:inputType属性:

带有中文输入法的手机,通常输入法会有三种类型的软键盘:中文键盘,英文键盘和数字键盘,不同键盘类型之间可以切换。虽然android:digits属性可以让EditText中只允许输入指定类型的字符,但并不能控制软键盘弹出时的类型。例如在设置android:digits只允许输入数字时,可能弹出的软键盘是英文键盘或中文键盘,需要用户点击切换到数字键盘后才可以输入;在设置android:digits只允许输入英文和数字时,可能弹出的软键盘是中文键盘,同样需要用户点击切换到英文键盘和数字键盘后才可以输入。如果能在软键盘显示时就直接跳到对应键盘类型,不需要用户切换就更好了。

当设置android:inputType为number时,输入法开启时会自动切换到数字键盘。当设置为这里的其他几个选项时,输入法开启时会自动切换到英文字母键盘。这里列举上述三种场景下的android:inputType配置。

场景一:只允许输入数字 android:inputType="number"。实际上,当inputType设置为number后,EditText中就只能输入数字了,那么android:digits="0123456789"也不用设置了。 如果android:inputType="number"和android:digits同时设置,则实际可以输入的字符以android:digits配置为准。例如android:digits="01234567+-",则可以输入的字符为"01234567+-",这时如果同时设置了android:inputType="number",可以达到自动切换到数字键盘的目的。

场景二:只允许输入数字和英文字母 android:inputType="textVisiblePassword"。其他几个选项似乎都不太合适,textCapxxx的会有大小写的约束,textPassword显然只能用在密码输入框中,如果不介意软键盘中多几个符号,textEmailAddress倒也可以用在这里。

场景三:只允许输入数字,英文字母和@.两个符号 android:inputType="textEmailAddress"。

三、使用正则以及重写TextWatcher限制输入

下面通过代码演示通过此种方法设置不能输入空格以及中文字符等。

一般对EditText的操作及处理都是用addTextChangedListener方法来对EditText进行监听,之后在监听方法中去做处理.这里也打算用这个种方法来做,大体的思路是监听EditText中输入的内容,然后将不是中文的部分清除掉,也就是置为空。

(1)首先我自定义TextWatcher类

package com.example.panchengjia.limittext;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;

/**
 * Created by panhouye on 2017/5/7 0007.
 */

public class LimitInputTextWatcher implements TextWatcher {
  /**
   * et
   */
  private EditText et = null;
  /**
   * 筛选条件
   */
  private String regex;
  /**
   * 默认的筛选条件(正则:不能输入中文和空格)
   * \u4E00-\u9FA5匹配中文\u0020匹配空格
   */
  private String DEFAULT_REGEX = "[\u4E00-\u9FA5\u0020]";

  /**
   * 构造方法
   *
   * @param et
   */
  public LimitInputTextWatcher(EditText et) {
    this.et = et;
    this.regex = DEFAULT_REGEX;
  }

  /**
   * 构造方法
   *
   * @param et  et
   * @param regex 筛选条件
   */
  public LimitInputTextWatcher(EditText et, String regex) {
    this.et = et;
    this.regex = regex;
  }

  @Override
  public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

  }

  @Override
  public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

  }

  @Override
  public void afterTextChanged(Editable editable) {
    String str = editable.toString();
    String inputStr = clearLimitStr(regex, str);
    et.removeTextChangedListener(this);
    // et.setText方法可能会引起键盘变化,所以用editable.replace来显示内容
    editable.replace(0, editable.length(), inputStr.trim());
    et.addTextChangedListener(this);

  }
  /**
   * 清除不符合条件的内容
   *
   * @param regex
   * @return
   */
  private String clearLimitStr(String regex, String str) {
    return str.replaceAll(regex, "");
  }
}

(2)Activity中的实现代码

package com.example.panchengjia.limittext;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    EditText et = (EditText) findViewById(R.id.et);
    //使用LimitInputTextWatcher中默认的输入规则
    et.addTextChangedListener(new LimitInputTextWatcher(et));
    EditText ett = (EditText) findViewById(R.id.ett);
    //设置只能输入中文
    ett.addTextChangedListener(new LimitInputTextWatcher(ett,"[^\u4E00-\u9FA5]"));
  }
}

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!


# android  # edittext  # Android EditText实现分割输入内容  # Android中自定义的dialog中的EditText无法弹出输入法解决方案  # 解决EditText不显示光标的三种方法(总结)  # 解决EditText编辑时hint 在6.0 手机上显示不出来的问题  # 只允许  # 英文字母  # 英文  # 切换到  # 几个  # 会有  # 可以用  # 弹出  # 三种  # 设置为  # 后才  # 都是  # 输入中文  # 在这里  # 好了  # 不太  # 不需要  # 列表中  # 两种  # 能在 


相关文章: c# F# 的 MailboxProcessor 和 C# 的 Actor 模型  设计网站制作公司有哪些,制作网页教程?  深圳网站制作的公司有哪些,dido官方网站?  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  常州自助建站:操作简便模板丰富,企业个人快速搭建网站  制作网页的网站有哪些,电脑上怎么做网页?  如何在宝塔面板中创建新站点?  如何快速搭建高效WAP手机网站?  linux top下的 minerd 木马清除方法  阿里云网站搭建费用解析:服务器价格与建站成本优化指南  如何在建站宝盒中设置产品搜索功能?  如何在腾讯云服务器上快速搭建个人网站?  如何零基础开发自助建站系统?完整教程解析  枣阳网站制作,阳新火车站打的到仙岛湖多少钱?  简历在线制作网站免费版,如何创建个人简历?  建站之星如何取消后台验证码生成?  php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】  建站之星安装提示数据库无法连接如何解决?  公司网站制作需要多少钱,找人做公司网站需要多少钱?  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?  宝华建站服务条款解析:五站合一功能与SEO优化设置指南  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  详解jQuery中基本的动画方法  建站之星如何防范黑客攻击与数据泄露?  网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?  建设网站制作价格,怎样建立自己的公司网站?  如何用wdcp快速搭建高效网站?  定制建站哪家更专业可靠?推荐榜单揭晓  网站制作网站,深圳做网站哪家比较好?  如何通过多用户协作模板快速搭建高效企业网站?  怎么将XML数据可视化 D3.js加载XML  高端企业智能建站程序:SEO优化与响应式模板定制开发  内网网站制作软件,内网的网站如何发布到外网?  如何撰写建站申请书?关键要点有哪些?  清除minerd进程的简单方法  如何在IIS中配置站点IP、端口及主机头?  齐河建站公司:营销型网站建设与SEO优化双核驱动策略  南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?  c# 在高并发场景下,委托和接口调用的性能对比  制作销售网站教学视频,销售网站有哪些?  网站制作知乎推荐,想做自己的网站用什么工具比较好?  建站之星北京办公室:智能建站系统与小程序生成方案解析  nginx修改上传文件大小限制的方法  宝塔建站后网页无法访问如何解决?  Python如何创建带属性的XML节点  公众号网站制作网页,微信公众号怎么制作?  外贸公司网站制作哪家好,maersk船公司官网?  C#怎么创建控制台应用 C# Console App项目创建方法  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。