Текстовое поле

Текстовое поле позволяет пользователю вводить информацию в приложение в одну или несколько строк. При нажатии на текстовое поле в него помещается курсор, и автоматически показывается клавиатура. Кроме непосредственного ввода, текстовое поле позволяет выполнять ряд других действий, таких как копирование и вставка, а также авто-завершение.

Вы можете добавить поле в разметку, используя объект типа EditText. Для XML существует элемент <EditText>.

Указание типа клавиатуры

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

Рисунок 1. Клавиатура для типа text.

Рисунок 2.Клавиатура для типа textEmailAddress.

Рисунок 3.Клавиатура в телефонном стиле.

Вы можете указать тип клавиатуры, используя атрибут android:inputType. Например, если вы хотите использовать поле для ввода emai, необходимо указать тип textEmailAddress:

Существуют различные типы, вот наиболее распространенные из них:

"text"
Обычная текстовая клавиатура.
"textEmailAddress"
Обычная текстовая клавиатура, включающая символ “@”.
"textUri"
Обычная текстовая клавиатура, включающая символ “/”.
"number"
Базовая цифровая клавиатура.
"phone"
Клавиатура в телефонном стиле.

Управление поведением

Помимо прочего, атрибут android:inputType позволяет указать поведение клавиатуры, например, начинать новые слова с большой буквы или использовать авто-завершение.

Атрибут android:inputType позволяет указать несколько значений, так что вы можете указать как раскладку, так и другие параметры одновременно, разделяя их вертикальной чертой “|”.

Вот наиболее часто используемые параметры поведения клавиатуры:

"textCapSentences"
Начинать новое предложение с большой буквы.
"textCapWords"
Начинать каждое слово с большой буквы. Удобно использовать например для ввода имен.
"textAutoCorrect"
Корректировать слова с ошибками.
"textPassword"
Скрывать вводимые символы точками. Удобно использовать для ввода пароля.
"textMultiline"
Позволять вводить длинные строки, включая символы переноса строки (возврат каретки).

Например, можно задать следующий параметры для ввода почтового адреса, начиная каждое слово с большой буквы и запретить текстовые предложения:

Все параметры перечислены в документации к атрибуту android:inputType.

Указываем действие для клавиатуры

Кроме изменения типа клавиатуры, Android позволяет указать действие, которое совершается при завершении ввода. Кнопка действия заменяет кнопку перевода строки и может называться, к примеру, “отправить” или “найти”.

Рисунок 4. Если вы указали атрибут android:imeOptions="actionSend, клавиатура будет включать в себя кнопку “Send”.

Указать действие можно с помощью атрибута android:imeOptions. Например для использования кнопки “отправить” можно использовать следующий код:

Если вы явно не указали действие, система пытается найти следующие поля, способные принять фокус ввода. Если такие поля найдены, система использует действие actionNext для текущего текстового поля, так что пользователь может нажать “далее”, чтобы перейти к следующему полю. Если таких полей нет, система использует действие actionDone. Вы можете переопределить поведение, задав к примеру actionSend, actionSearch или отключить стандартное поведение, указав действие actionNone.

Обработка нажатия кнопки действия

Если вы указали действие для клавиатуры с помощью атрибута android:imeOptions, вы можете использовать слушатель TextView.OnEditorActionListener для его реализации. Интерфейс TextView.OnEditorActionListener предоставляет метод обратного вызова onEditorAction(), который указывает тип действия с помощью его идентификатора, вроде IME_ACTION_SEND или IME_ACTION_SEARCH.

Например, так можно обработать нажатие кнопки “отправить” на клавиатуре:

Установка названия для кнопки действия

Если клавиатура слишком большая, чтобы разумно делить пространство с текстовым полем (например, если устройство находится в альбомной ориентации), срабатывает полноэкранный (расширенный) режим. В этом режиме кнопка действия размещается после поля ввода. Вы можете указать текст для кнопки, используя атрибут android:imeActionLabel:

Рисунок 5. Собственный текст для кнопки действия.

Прочие флаги клавиатуры

Существует еще несколько относящихся к действиям флагов поведения клавиатуры. Все доступные флаги описаны в документации к атрибуту android:imeOptions.

Например, на рисунке 5 показано как система включает полноэкранный режим, в котором текстовое поле растягивается на весь экран в альбомной ориентации. Вы можете запретить полноэкранный режим, указав флаг flagNoExtractUi в атрибуте android:imeOptions.

Рисунок 6.Вид поля при отключенном полноэкранном режиме (android:imeOptions="flagNoExtractUi")

Авто-дополнение ввода

Если вы хотите включить авто-дополнение для ввода, вы можете использовать класс AutoCompleteTextView (это подкласс EditText). Для реализации авто-дополнения необходимо указать адаптер android.widget.Adapter, который будет предоставлять предложения. Доступно несколько типов адаптеров, все зависит от того где хранятся данные (например в массиве или в базе данных).

Рисунок 7. Пример использования AutoCompleteTextView.

Далее мы покажем как использовать AutoCompleteTextView в связке с адаптером ArrayAdapter для использования предложений из массива:

  1. Добавьте в разметку элемент AutoCompleteTextView. Пример:

  2. Создайте массив с предложениями. Например, здесь приведен массив с названиями стран, который хранится в XML ресурсе (res/values/strings.xml):

  3. В классе явления или фрагмента вставьте следующий код, чтобы указать адаптер, предоставляющий строки для авто-дополнения:

В приведенном примере, в конструкторе объекта arrayAdapter происходит связывание массива стран с визуальным компонентом разметки simple_list_item_1, в котором он будет отображаться (это стандартная разметка Android).

Для привязки адаптера к полю ввода используется метод setAdapter().

Добавить комментарий