【问题标题】:how to limit max characters in edittext with emoji inputs allowed?如何在允许输入表情符号的情况下限制编辑文本中的最大字符数?
【发布时间】:2018-05-10 09:25:24
【问题描述】:

我有一个要求,我需要限制在 EditText 中输入的字符数。我知道这可以通过 .xml 布局文件中的 EditText 属性 android:maxLength 轻松实现。

但我的问题是我的 EditText 也应该允许用户输入表情符号。现在要注意的是,某些表情符号的长度有时为 2 或有时为 1。因此,android:maxLength=1 不允许输入长度为 2 的表情符号。

我可以通过Character类的这个方法得到一个字符串的正确长度(每个表情符号记为1):

Character.codePointCount(charSequence.toString(), 0, charSequence.toString().length())

我尝试像这样使用 InputFilter:

InputFilter inputFilter = new InputFilter() {
            @Override
            public CharSequence filter(CharSequence charSequence, int i, int i1, Spanned spanned, int i2, int i3) {
                if (Character.codePointCount(charSequence.toString(), 0, charSequence.toString().length()) <= maxCharactersAllowed) {
                    return null;
                } else {
                    return "";
                }
            }
        };

但是返回的 charSequence 给我的纯文本和表情符号文本给出了奇怪的结果,所以我用来比较长度的字符串给出了奇怪的结果。

有人可以帮我正确实施对 EditText 接受表情符号字符的最大字符数的限制吗?

【问题讨论】:

  • 尝试使用TextWatcher进行edittext并实现onTextChanged中的代码
  • 我在这里回答了这个问题你可以试试Link

标签: android android-edittext emoji maxlength


【解决方案1】:

谢谢,Joe。在您的帮助下,我找到了这样的解决方案:

editText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
                oldTextString = charSequence.toString();
            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void afterTextChanged(Editable editable) {
                String newTextString = editable.toString();
                if (!oldTextString.equals(newTextString)) {
                    if (Character.codePointCount(newTextString, 0, newTextString.length()) > maxCharactersAllowed) {
                        newTextString = oldTextString;
                    }
                    editText.setText(newTextString);
                    editText.setSelection(newTextString.length());
                }
            }
        });

【讨论】:

  • 如果 emoji 在 android 键盘中不可用,则此代码不起作用。如果我从最新的操作系统输入新的表情符号并在旧操作系统上检查它,那么它就会超过计数。
  • 你能告诉我你用的是哪个表情符号吗?它的代码点数是多少?
  • 你可以使用任何新的表情符号,参考:blog.emojipedia.org/157-new-emojis-in-the-final-2018-emoji-list
猜你喜欢
  • 1970-01-01
  • 2012-01-22
  • 1970-01-01
  • 2019-07-22
  • 1970-01-01
  • 2021-11-16
  • 1970-01-01
  • 2012-08-01
相关资源
最近更新 更多