Android实战场景 - 动态监听 EditText 输入数据用于字数提示

这篇内容是从挺早以前的Blog剥离出来的一部分,主要记录一些开发中常见的功能场景

功能需求:首先仅支持用户数据中文、英文或数字,同时根据用户在 EditText 中输入的内容,动态显示用户的输入字数

实现效果,类似下图

在这里插入图片描述

使用方式

  • 基础(仅支持用户数据中文、英文或数字)
  mEditText.addTextChangedListener(LimitInputTextWatcher(mEditText))
  • 进阶(仅支持用户数据中文、英文或数字,同时根据用户在 EditText 中输入的内容,动态显示用户的输入字数)
  mEditText.addTextChangedListener(LimitInputTextWatcher(mEditText,vTvNum))

LimitInputTextWatcher

package com.jsmedia.jsmanager.view;

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

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

    /**
     * 构造方法
     *
     * @param et
     */
    public LimitInputTextWatcher(EditText et,TextView tv) {
    
    
        this.et = et;
        this.tv = tv;
        this.regex = DEFAULT_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);
        tv.setText("" + editable.toString().trim().length() + "/16");
    }

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

猜你喜欢

转载自blog.csdn.net/qq_20451879/article/details/128655612