EditText限制输入的字节数

注意是字节数!

注意是字节数!

注意是字节数!

自定义一个TextWatcher

package com.ckdroid.wifisos.Utils;

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

import java.io.UnsupportedEncodingException;

/**
 * Created by ckdroid on 2017/3/25.
 */

public class ByteLimitWatcher implements TextWatcher {

    private EditText editText;
    private TextWatcher watcher;
    private int byteLength;

    public ByteLimitWatcher(EditText editText, TextWatcher watcher, int byteLength) {
        this.editText = editText;
        this.watcher = watcher;
        this.byteLength = byteLength > 0 ? byteLength : 0;
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        if (watcher != null) {
            watcher.beforeTextChanged(s, start, count, after);
        }
    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        if (s != null) {
            String tmp = s.toString();
            try {
                if (count > 0 && byteLength > 0) {
                    int cnt = count;
                    do {
                        tmp = s.toString().substring(0, start + cnt) + s.toString().substring(start + count);
                        byte[] bytes = tmp.getBytes("utf-8");
                        if (bytes.length < byteLength) {
                            break;
                        }
                    } while (cnt-- > 0);
                    if (!tmp.equals(s.toString())) {
                        editText.setText(tmp);
                        editText.setSelection(start + cnt);
                    }
                }
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
        }
        if (watcher != null) {
            watcher.onTextChanged(s, start, before, count);
        }
    }

    @Override
    public void afterTextChanged(Editable s) {
        if (watcher != null) {
            watcher.afterTextChanged(s);
        }
    }
}

使用方法:

editText.addTextChangedListener(new ByteLimitWatcher(editText,null,31));

一个中文占3个字节,一个英文占1个字节

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 179,300评论 25 708
  • 1.@property @synthesize关键字 *注意:这两个关键字是编译器特性,让xcode可以自动生成g...
    隔壁小羊阅读 215评论 0 0
  • 它们静静地躺在那里!!! 那支笔 静静的躺在纸笺上 它要写下 花开的承诺 秋雨的缠绵 还将要有的那一场风雪飘飘扬扬...
    安之毒阅读 216评论 0 0
  • 1.布局优化2.绘制优化3.响应速度优化和ANR日志分析 布局优化 布局优化思想就是,尽量减少布局文件的层级,以便...
    wenou阅读 414评论 0 0
  • 少年郎,下来的内容会引发些许情感上的不适,做好准备后,我就要开始呲咧了。 看过《食神》的你,决忘不了火鸡面目狰狞声...
    陈小花同志阅读 329评论 0 1

友情链接更多精彩内容