Подтвердить что ты не робот

EditText с отдельной текстовой строкой, переносом строк и выполнением Done?

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

  • Вид EditView на экране имеет высоту для нескольких строк (например, 3-4).
  • Текст контента представляет собой одну строку (то есть, строки не разрываются).
  • Если текст содержимого длиннее ширины представления, он должен быть перенесен в следующую строку
  • Клавиша "Enter" на программной кнопке отображает метку "Готово".

Я мог бы достичь {1,2,3} и {1,2,4}, но не {1,2,3,4}. Мое рациональное заключается в том, что, поскольку содержимое является отдельной строкой (без разрывов строк), клавиша Enter не используется и, следовательно, должна быть изменена на метку Done.

Мой код установки выглядит следующим образом

editText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_SENTENCES | InputType.TYPE_TEXT_FLAG_IME_MULTI_LINE);
editText.setHorizontallyScrolling(false);
editText.setSingleLine(false);
// This does not work. Soft keyboard has Enter action.
editText.setImeOptions(EditorInfo.IME_ACTION_DONE);

Возможно ли это? Любое предложение?

4b9b3361

Ответ 1

Эта комбинация (и конкретный порядок вызовов метода EditText) должна произвести требуемую конфигурацию:

  editText.setInputType(
    InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_SENTENCES);
  editText.setSingleLine(true);
  editText.setLines(4); // desired number of lines
  editText.setHorizontallyScrolling(false);
  editText.setImeOptions(EditorInfo.IME_ACTION_DONE);

Ответ 2

Просто добавьте

editText.setHorizontallyScrolling(false);
editText.setMaxLines(Integer.MAX_VALUE);

с вашим экземпляром edittext в вашей деятельности программно.

Он настраивает экземпляр EditText, чтобы пользователь редактировал строку с одной строкой, которая отображается с мягкой упаковкой на нескольких строках с параметрами IME.