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]"));
  }
}

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

(0)

相关推荐

  • 解决EditText编辑时hint 在6.0 手机上显示不出来的问题

    当EditText编辑时  hint 在 6.0 手机上显示不出来.... 就要增加一句话去重新设置颜色值   Android:textColorHint = "#707070" 以上这篇解决EditText编辑时hint 在6.0 手机上显示不出来的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • 解决EditText不显示光标的三种方法(总结)

    解决方法有以下3种 1.在Edittext中加入以下属性 android:cursorVisible="true" android:textCursorDrawable="@null" 2.在Edittext中加入以下属性 android:cursorVisible="true" android:textCursorDrawable="@drawable/test_cursor" 对应的drawable文件 <?xml

  • Android中自定义的dialog中的EditText无法弹出输入法解决方案

    1.解决无法弹出输入法: 在show()方法调用之前,用dialog.setView(new EditText(context))添加一个空的EditText,由于是自定义的AlertDialog,有我们指定的布局,所以设置这个不会影响我们的功能,这样就可以弹出输入法了-- 2.可以弹出输入法了,但了为了增强用户体验性,当dialog中含有editText时应该,在显示dialog的同时自动弹出键盘: (1) 可以在自定义的dialog中增加如下方法: public void showKeybo

  • Android EditText实现分割输入内容

    在项目中可能会有许多需要输入手机号码.银行卡号或者身份证号等内容的输入框.如果直接输入的话将会是一堆号码堆在一起,第一是不太美观,第二也容易出错,用户体验不太好.但是若将输入的号码按特定格式进行分割将会大大提高用户体验! 以下是对常用的号码进行简单封装的自定义输入框控件,方便我们在开发过程中使用: 该控件支持xml属性指定,也支持代码指定: 该控件支持类型分别为电话号码(000 0000 0000).银行卡号(0000 0000 0000 0000 000)和身份证号(000000 0000 0

  • Android中Edittext设置输入条件

    一.应用场景 之前做商城应用时,会有对用户资料的设置情况进行限制,如下: (1)用户邮箱,应当只允许输入英文字母,数字和@.两个符号, (2)用户手机,应当只能输入数字,禁止输入其他字符. (3)用户密码,应当不能输入空格以及中文字符等. 二.解决方案 针对用户邮箱以及用户手机,有以下两种解决方案: (1)EditText中的android:digits属性: 它表示EditText能够接受的字符集合.通过配置此属性,就可以实现只允许输入指定的字符.这里列举上述三种场景下的android:dig

  • Android中EditText 设置 imeOptions 无效问题的解决方法

    有时候我们需要在EditText  输出完之后 需要在键盘出现 右下角变成"Go"或"前往 搜索时:通常我们需要设置Android:imeOptions属性.Android:imeOptions的值有actionGo. actionSend .actionSearch.actionDone等 但是今天我发现设置了无效  那是因为我设置了 android:maxLines="1" 解决方法 就是去掉 android:maxLines="1"

  • Android中EditText显示明文与密码的两种方式

    效果图如下所述: 布局 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_pa

  • Android中EditText屏蔽第三方输入法表情的方法示例

    前言 众所周知如果用第三方的输入法的表情会给开发带来一定的麻烦,一般地像服务器上传的字符都是普通的字符,但是测试,就是狠狠得拿出搜狗输入法,点几个表情,那么问题就来了,要么是显示异常,要么是直接crash,但是有很少的部分机型,会支持,可能是第三方的ROM对Android 的TextView 做了一定的处理,所以,我们只能干掉该死的表情了. 具体的方法如下: 首先是在EditTextView 里面加入TextWatcher 在判断字符的变化时,就判断字符的类型,是否为字符,否则删除原来的字符,重

  • Android中EditText如何去除边框添加下划线

    废话不多说了,直接给大家贴代码了. <span style="font-family: Arial, Helvetica, sans-serif;"><?xml version="1.0" encoding="utf-8"?> </span> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

  • Android中EditText光标在4.0中的bug及解决方法

    本文分析了Android中EditText光标在4.0中的bug及解决方法.分享给大家供大家参考,具体如下: 一.问题: 不知道为什么,我的EditText的在我自己的手机中出现的时候,他的光标就变得没有了,我开始还以为是光标不见了,后面我修改了一下EditText的背景颜色,才发现是因为光标的颜色变成了白色,所以没有看见. 二.解决办法 : 复制代码 代码如下: android:textCursorDrawable 设置值为"@null",但是我觉得那个不怎么好看,那个地方也可以替换

  • Android中EditText光标的显示与隐藏方法

    目录 Android EditText的光标的显示和隐藏 Android之第一次不显示EditText光标 总结 Android EditText的光标的显示和隐藏 一.java代码 1.编辑框的光标 显示的方法: editText.setCursorVisible(true); 2.编辑框的光标 隐藏的方法: editText.setCursorVisible(false); 二.xml代码 android:cursorVisible="true" <!--或者"fa

  • Android中EditText和AutoCompleteTextView设置文字选中颜色方法

    EditText和AutoCompleteTextView设置文字选中颜色 大多数Android Rom上,文本选择的背景色都是很好看的鲜绿色, 但是在某些垃圾的三星手机上,居然是蓝色,令人恶心反感,其实完全可以通过程序来修改,文本的默认选中背景色. 所用API解释 复制代码 代码如下: android:textColorHighlight Color of the text selection highlight. EditText设置效果 AutoCompleteTextView 设置效果

  • Android中EditText setText方法的踩坑实战

    1.平平常常中就这样开始 某一天,我准备做一个搜索功能,这个搜索功能呢大概是在主活动A中,用EditText接收输入,当EditText监听到输入框中内容有变化,跳转到活动B中,活动B中准备有搜索历史记录等等,等在活动B中确定好搜索关键词后,跳回到活动A中,执行搜索,并显示搜索结果--一切顺顺利利,然后呢,懵逼了,我回不了活动A了. 当时的情况大致是这样的, 布局文件:activity_main.xml <?xml version="1.0" encoding="utf

  • Android中EditText禁止输入表情的实例代码

    最近在做的项目中用户编辑资料的时候不希望用户输入表情,如果用户输入表情的话上传给后台要报错,所以需要我们前端做一个判断.下面就来说一下怎么在EditText中屏蔽表情吧. 网上有很多这样的列子但是一不小心就会掉进坑里面,比如继承EditText,重写addTextChangedListener()方法.可能当时你测试的时候没有什么问题,但是项目上线后就会有很多问题,错误率很高,但是查看友盟后台的时候好像是截取字符串长度方面的错误.所以建议大家不要使用那个方法了. 因为上面的方法不行,肯定要想其他

随机推荐