如何在允许表情符号输入的情况下限制编辑文本中的最大字符数?
how to limit max characters in edittext with emoji inputs allowed?
我有一个要求,我需要限制在 EditText 中输入的字符数。我知道这可以通过我的 .xml 布局文件中的 EditText 属性 android:maxLength 轻松实现。
但我的问题是我的 EditText 还应该允许用户输入表情符号。现在要注意的是,一些表情符号的长度有时是 2 有时是 1。因此,android:maxLength=1 不允许输入长度 = 2 的表情符号.
我可以使用字符 class:
的这种方法得到字符串的正确长度(每个表情符号字符都算作 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 接受表情符号字符的最大字符数的限制吗?
谢谢,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());
}
}
});
我有一个要求,我需要限制在 EditText 中输入的字符数。我知道这可以通过我的 .xml 布局文件中的 EditText 属性 android:maxLength 轻松实现。
但我的问题是我的 EditText 还应该允许用户输入表情符号。现在要注意的是,一些表情符号的长度有时是 2 有时是 1。因此,android:maxLength=1 不允许输入长度 = 2 的表情符号.
我可以使用字符 class:
的这种方法得到字符串的正确长度(每个表情符号字符都算作 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 接受表情符号字符的最大字符数的限制吗?
谢谢,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());
}
}
});