如何限制允许使用表情符号的EditText最大字符数?

4

我有一个需求,需要限制在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的最大字符数限制吗?同时要能够接受表情字符。


尝试在EditText中使用TextWatcher,并在onTextChanged中实现代码。 - Jyoti JK
我在这里回答了这个问题,你可以试一下。链接 - Nankai
1个回答

3

感谢你,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());
                }
            }
        });

如果 Android 键盘中没有表情符号,则此代码无法工作。如果我在最新的操作系统中输入了新的表情符号并在旧操作系统上进行检查,则会超出计数。 - Prathamesh Talathi
你能告诉我你正在使用哪个表情符号吗?它的码点数是多少? - Priya Sindkar
你可以选择任何新的表情符号,参考:https://blog.emojipedia.org/157-new-emojis-in-the-final-2018-emoji-list/ - Prathamesh Talathi
一些表情符号由多个代码点组成。 - cmak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接