我是靠谱客的博主 纯真皮带,最近开发中收集的这篇文章主要介绍Android实战场景 - 限制EditText仅支持输入数字、英文、汉字,禁止输入表情等特殊符号,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

因项目需求,需要禁止用户输入表情符号,具体如下 ~

EditText相关Blog

  • TextView、EditText属性大全
  • 监听 EditText 文本变化
  • 设置 EditText 光标颜色与下划线颜色
  • EditText 禁止输入表情符号
  • EditText 一键清除内容
  • Android实战场景 - 输入手机号、银行卡号、身份证号时动态格式化

Hint:所谓"禁止输入表情符号",也可以理解为"只能输入数字、英文、汉字"

      • 基本认知
      • 自定义TextWatcher + 正则过滤
      • 三方框架

基本认知

起初我以为有俩种方式可以实现这个功能

  • 第一种 键盘弹出不显示表情选项,从根源解决问题失败,因为每个手机的Rom烧制都是固定的,很难去操作,主要是水平有限
  • 第二种 正常显示表情选项,但是输入之后EditText进行过滤,不做显示处理,这样我们传输的时候就不会出现错误

后来再回头的看的时候,发现常见的有俩种方式实现我们的需求

  • 通过 正则过滤禁止输入的内容(也就是上方的第二种方式)
  • 通过 三方框架 做处理,大多实现原理相同

自定义TextWatcher + 正则过滤

限制正则:[^a-zA-Z0-9u4E00-u9FA5]

使用方式: etName.addTextChangedListener(LimitInputTextWatcher(etName))

LimitInputTextWatcher (自定义TextWatcher,内部定义了仅支持输入数字、英文、汉字的过滤规则)- 可直接Copy

import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;

public class LimitInputTextWatcher implements TextWatcher {
    //et
    private EditText et = null;
    //筛选条件
    private String regex;
    
    //默认的筛选条件(正则:只能输入中文、英文、数字)
    private String DEFAULT_REGEX = "[^a-zA-Z0-9u4E00-u9FA5]";
    
    /**
     * 构造方法
     *
     * @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, "");
    }
}

借鉴自 - android 利用正则表达式 控制EditText只能输入数字、英文、汉字

方式扩展:以下方法,尚且未测,仅作记录

  //昵称仅支持10位字母/数字/中文
  //限制只能输入中文,英文,数字
  InputFilter typeFilter = new InputFilter() {
      @Override
      public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
          Pattern p = Pattern.compile("[0-9a-zA-Z|u4e00-u9fa5]+");
          Matcher m = p.matcher(source.toString());
          if (!m.matches()) return "";
          return null;
      }
  };


  //如果要限制输入字数,数组中加上new InputFilter.LengthFilter(maxLength)
  vEtNickName.setFilters(new InputFilter[]{typeFilter, new InputFilter.LengthFilter(10)});

三方框架

查询一些网上的处理方案,有的朋友是通过一些正则过滤,有的是通过自定义类去做处理,当然应该都是通过校验实现的,这里我在Github找到了一个自定义控件内置表情处理,可以直接拿来用,但是要详情使用的话,最好熟悉一下对应的属性信息。

Github作者介绍该自定义控件拥有以下功能

  • 带删除功能的EditText
  • 显示或者隐藏密码
  • 可设置自动添加分隔符分割电话号码、银行卡号等
  • 支持禁止Emoji表情符号输入

关于EditTextinputType输入类型,可以直接查看 TextView、EditText属性大全

使用方式

build

 compile 'com.xw.repo:xedittext:1.0.6@aar'

Layout (父布局加入命名空间)

 xmlns:app="http://schemas.android.com/apk/res-auto"

设置方式:EditText限制输入信息(有数字,密码等,但不包含表情)

android:inputType=""

EditText(所用代码)

 <com.xw.repo.xedittext.XEditText
        android:layout_width="match_parent"
        android:layout_height="161dp"
        android:background="@null"
        android:gravity="top"
        android:hint="请分享相关问题"
        android:paddingLeft="17dp"
        android:textColor="#999999"
        android:textSize="13sp"
        app:x_disableEmoji="true" />

常见功能

  • 禁止表情 app:x_disableEmoji="true"
  • 一键清除 app:x_disableClear="true"
  • hint显示位置 android:gravity="top"
  • 取消Edit原有的下划线背景 android:background="@null"

如有更多需求,可前往另一位Blog友那儿进行查看哦 ~

最后

以上就是纯真皮带为你收集整理的Android实战场景 - 限制EditText仅支持输入数字、英文、汉字,禁止输入表情等特殊符号的全部内容,希望文章能够帮你解决Android实战场景 - 限制EditText仅支持输入数字、英文、汉字,禁止输入表情等特殊符号所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部