Я пытаюсь ограничить пользователя от переполнения пользовательского интерфейса, устанавливая ограничение на количество новых строк и символов.
Я использую приведенный ниже код, но проблема в том, что getLineCount()
, похоже, получает только счет \n
вместо количества строк.Таким образом, пользователь все еще может переполнить, если есть новая строка без символа \n
.
Так, если пользователь введет 3 строки текста, а затем он все еще может добавить 5 новых строк, и он может испортить свою и другиеUI.Так как я могу исправить эту ошибку?
Примечание. Я пробовал свойство ограничения строки XML, но оно не работало: android:maxLines="5"
etDescription.addTextChangedListener(new TextWatcher()
{
boolean _ignore = false; // indicates if the change was made by the TextWatcher itself.
final int DESCRIPTION_LETTER_LIMIT = 168;
final int DESCRIPTION_LINE_LIMIT = 5;
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after)
{
if(after > DESCRIPTION_LETTER_LIMIT || etDescription.getLineCount() > DESCRIPTION_LINE_LIMIT )
{
Log.d(TAG, "beforeTextChanged: limit reached. After count and line count: "+ after+ " | "+etDescription.getLineCount());
isLimitReached = true;
}
else
{
Log.d(TAG, "beforeTextChanged: limit NOT reached. After count and line count: "+ after+ " | "+etDescription.getLineCount());
isLimitReached = false;
}
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count)
{
}
@Override
public void afterTextChanged(Editable s)
{
if (_ignore)
return;
_ignore = true; // prevent infinite loop
// Change your text here.
if(isLimitReached)
{
if(etDescription.getSelectionEnd() - 1 != -1)
{
etDescription.getText().delete(etDescription.getSelectionEnd() - 1, etDescription.getSelectionStart());
isLimitReached = false;
}
}
_ignore = false; // release, so the TextWatcher start to listen again.
}
});