Android中Edittext设置输入条件

Android中Edittext设置输入条件,第1张

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

一、应用场景

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

(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中只允许输入指定类型的字符,但并不能控制软键盘d出时的类型。例如在设置androID:digits只允许输入数字时,可能d出的软键盘是英文键盘或中文键盘,需要用户点击切换到数字键盘后才可以输入;在设置androID:digits只允许输入英文和数字时,可能d出的软键盘是中文键盘,同样需要用户点击切换到英文键盘和数字键盘后才可以输入。如果能在软键盘显示时就直接跳到对应键盘类型,不需要用户切换就更好了。

当设置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 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设置输入条件所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1146274.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-31
下一篇2022-05-31

发表评论

登录后才能评论

评论列表(0条)

    保存