Android установил новую линию и ограничение длины для редактирования текста - PullRequest
0 голосов
/ 30 апреля 2019

Я пытаюсь ограничить пользователя от переполнения пользовательского интерфейса, устанавливая ограничение на количество новых строк и символов.

Я использую приведенный ниже код, но проблема в том, что 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.
                        }
                });

1 Ответ

0 голосов
/ 30 апреля 2019

Попробуйте это

  <EditText
            android:id="@+id/editText"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:paddingStart="8dp"
            android:paddingEnd="8dp"
            android:lines="1"/>

или вы можете сделать это в коде альтернативно

EditText editText = findViewById(R.id.editText);
editText.setLines(1);

Вы можете прочитать больше на DOC здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...