我们如何将EditText
长度限制为一定数量的字数(100字)。
即使从某些地方复制大文本,但粘贴它应该只接受100个单词。
我知道我们可以通过字符数(maxLength
)
我尝试使用下面的代码,但它并没有将它限制为100个单词,并且允许复制粘贴大文本。
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int start, int count, int after) {
int wordsLength = countWords(charSequence.toString());// words.length;
// count == 0 means a new word is going to start
if (count == 0 && wordsLength >= MAX_WORD_LIMIT) {
int charLength = mDescription.getText().length();
setCharLimit(mDescription, charLength > 0 ? charLength - 2 : charLength);
} else {
removeFilter(mDescription);
}
和
private InputFilter filter;
private void setCharLimit(EditText et, int max) {
filter = new InputFilter.LengthFilter(max);
et.setFilters(new InputFilter[]{filter});
}
private void removeFilter(EditText et) {
if (filter != null) {
et.setFilters(new InputFilter[0]);
filter = null;
}
}
答案 0 :(得分:3)
您可以使用以下方法执行此操作:
android:maxLength="50"
。
答案 1 :(得分:1)
希望它为你工作
edittext.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
// Check your edittext length here
if (edittext.getText().toString().length() > 100)
edittext.setText(edittext.getText().toString().substring(0, 100);
}
});
答案 2 :(得分:1)
edittext.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence charSequence, int start, int before, int count) {
//To fix word count
String yourText= editText.getText().toString().replace(String.valueOf((char) 160), " ");
if (yourText.split("\\s+").length > MAX_WORD_LIMIT ) {
int space = 0;
int length = 0;
for (int i = 0; i < yourText.length(); i++) {
if (yourText.charAt(i) == ' ') {
space++;
if (space >= MAX_WORD_LIMIT) {
length = i;
break;
}
}
}
if (length > 1) {
editText.getText().delete(length, yourSelf.length()); // deleting last space
setCharLimit(editText, length - 1); //or limit edit text
}
} else {
removeFilter(editText);
}
}
@Override
public void afterTextChanged(Editable s) {
});
private InputFilter filter;
private void setCharLimit(EditText et, int max) {
filter = new InputFilter.LengthFilter(max);
et.setFilters(new InputFilter[] { filter });
}
private void removeFilter(EditText et) {
if (filter != null) {
et.setFilters(new InputFilter[0]);
filter = null;
}
}
这里160是非破坏空间
答案 3 :(得分:1)
使用edittext的 android:maxLength 属性来解决您的问题。
答案 4 :(得分:1)
科林语言-要检查最多的单词,需要检查总空间
->步骤1
var filter: InputFilter?=null
->步骤2
edt.addTextChangedListener(object : TextWatcher {
override fun afterTextChanged(s: Editable?) {
var count : Int = 0
if(s.toString().length > 0)
for(i in 0..s.toString().length-1){
if(s.toString()[i].toString() == " "){
count++
}
if(i > 1 && s.toString()[i-1].toString() == " " && s.toString()[i].toString() == " "){
count--
}
}
if (count >= MAX_COUNTS_WORDS){
filter = InputFilter.LengthFilter(edt.text.toString().length)
edt.filters = arrayOf<InputFilter>(filter ?: return)
}
else if (filter != null) {
edt.filters = arrayOfNulls(0)
filter = null
}
}
override fun beforeTextChanged(s: CharSequence?, p1: Int, p2: Int, p3: Int) {
}
override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
}
})
答案 5 :(得分:0)
如果你想找到字数,那么你可以使用java逻辑。
String text = "More than 100 word sentence";
String[] txtArr = text.split(" ");
现在只挑选前100个索引词。
这只是一个黑客攻击。可能有更好的方法。
答案 6 :(得分:0)
您可以使用拆分功能索引。抱歉这么长的字符串,希望你能得到这个想法。只需提取一些变量。
edittext.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
if (edittext.getText().toString().split(" ").size() > 100)
edittext.setText(edittext.getText().toString().substring(0, edittext.getText().toString().indexOf(edittext.getText().toString().split(" ").get(100))));
}
});