Android EditText maxLenght计算UTF-8编码字符

时间:2016-07-22 15:32:07

标签: android encoding utf-8 android-edittext

考虑到所有UTF-8字符,我需要将maxLenght属性设置为我的Android EditText。如果我以编程方式使用maxLenght xml属性或InputFilter.LenghtFilter,则限制结果不是我需要的。

在将EditText文本发送到我的服务器API之前,我使用以下方法对其进行编码:

String encoded = URLEncoder.encode(EditText.getText(), "utf-8");

我的常量限制值是1000,当用户输入一些特殊字符作为表情符号时,它们似乎被视为一个字母。我想根据UTF-8编码maxLenght设置String

我尝试使用TextWatcher制作一些逻辑,也许是正确的方法,但我没有成功。

2 个答案:

答案 0 :(得分:1)

您可以使用InputFilter,如下所示:

private final InputFilter filter = new InputFilter() {
    @Override
    public CharSequence filter(CharSequence source, int start, int end,
        Spanned dest, int dstart, int dend) {
        try {
            String encodedDest = URLEncoder.encode(dest.toString(), "UTF-8");
            if (encodedDest.length() > 1000) {
                return "";
            }
        } catch (UnsupportedEncodingException uee) {
            // handle this
        }
        return null;
    }
};

如果编码长度超过1000个字符,这将阻止用户向EditText添加文本。 (如果我理解正确的话,这就是你想要实现的目标)

将此过滤条件添加到EditText

yourEditTextInstance.setFilters(new InputFilter[]{filter});

答案 1 :(得分:0)

只需使用 InputFiltler.LengthFilter

此小部件会自动使用调整Unicode解析

Character.isHighSurrogate()

用法

editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(15)});