考虑到所有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
制作一些逻辑,也许是正确的方法,但我没有成功。
答案 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)});