Укажите тип способа ввода

Как создать письмо
Jetpack Compose – это рекомендуемый набор инструментов для создания интерфейсов Android. Узнайте, как использовать сенсорный ввод в Compose.

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

Помимо типа кнопок, доступных при использовании способа ввода, можно указать такие параметры, как предоставление исправлений правописания, написание новых предложений с заглавной буквы и замена символа возврата каретки командной кнопкой, например Готово или Далее. На этой странице рассказывается, как задать эти характеристики.

Как указать тип клавиатуры

Всегда указывайте метод ввода для текстовых полей, добавляя атрибут android:inputType в элемент <EditText>.

Поле для ввода номера телефона
Рисунок 1. phoneТип входных данных
.

Например, если вам нужен способ ввода для номера телефона, используйте значение "phone":

<EditText
    android:id="@+id/phone"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:hint="@string/phone_hint"
    android:inputType="phone" />
Тип поля ввода textPassword
Рисунок 2. textPasswordТип входных данных
.

Если текстовое поле предназначено для пароля, используйте значение "textPassword", чтобы скрыть введенные пользователем символы:

<EditText
    android:id="@+id/password"
    android:hint="@string/password_hint"
    android:inputType="textPassword"
    ... />

Атрибут android:inputType может принимать несколько значений, некоторые из которых можно комбинировать, чтобы задать внешний вид метода ввода и дополнительные функции.

Как включить предложения по исправлению опечаток и другие функции

автозамена
Рисунок 3. Добавление textAutoCorrect позволяет автоматически исправлять ошибки.

Атрибут android:inputType позволяет задать различные варианты поведения для метода ввода. Если текстовое поле предназначено для ввода обычного текста, например текстового сообщения, включите автоматическую проверку правописания, задав значение "textAutoCorrect".

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

<EditText
    android:id="@+id/message"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:inputType=
        "textCapSentences|textAutoCorrect"
    ... />

Как указать действие для способа ввода

В большинстве способов ввода в нижнем углу есть кнопка, которая подходит для текущего текстового поля. По умолчанию система использует эту кнопку для действий Далее или Готово, если текстовое поле не поддерживает многострочный текст (например, с помощью android:inputType="textMultiLine"). В этом случае командная кнопка выполняет функцию символа возврата каретки. Однако вы можете указать другие действия, которые лучше подходят для вашего текстового поля, например Отправить или Перейти.

Чтобы указать командную кнопку на клавиатуре, используйте атрибут android:imeOptions со значением действия, например "actionSend" или "actionSearch". Пример:

кнопка отправки;
Рисунок 4. Кнопка Отправить появится, когда вы объявите android:imeOptions="actionSend".
<EditText
    android:id="@+id/search"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:hint="@string/search_hint"
    android:inputType="text"
    android:imeOptions="actionSend" />

Чтобы отслеживать нажатия командной кнопки, определите TextView.OnEditorActionListener для элемента EditText. В обработчике событий отреагируйте на подходящий идентификатор действия IME, определенный в классе EditorInfo, например IME_ACTION_SEND, как показано в следующем примере:

Kotlin

findViewById<EditText>(R.id.search).setOnEditorActionListener { v, actionId, event ->
    return@setOnEditorActionListener when (actionId) {
        EditorInfo.IME_ACTION_SEND -> {
            sendMessage()
            true
        }
        else -> false
    }
}

Java

EditText editText = (EditText) findViewById(R.id.search);
editText.setOnEditorActionListener(new OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        boolean handled = false;
        if (actionId == EditorInfo.IME_ACTION_SEND) {
            sendMessage();
            handled = true;
        }
        return handled;
    }
});

Предлагать варианты автозаполнения

Если вы хотите показывать пользователям подсказки по мере ввода текста, используйте подкласс EditText под названием AutoCompleteTextView. Чтобы реализовать автозаполнение, необходимо указать Adapter, который будет предлагать варианты текста. В зависимости от того, откуда поступают данные (например, из базы данных или массива), можно использовать разные адаптеры.

подсказки текста;
Рисунок 5. Пример значка AutoCompleteTextView с текстовыми подсказками.

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

  1. Добавьте AutoCompleteTextView в макет. Вот макет, в котором есть только текстовое поле:
    <?xml version="1.0" encoding="utf-8"?>
    <AutoCompleteTextView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/autocomplete_country"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
  2. Определите массив, содержащий все текстовые подсказки. Например, вот массив названий стран:
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string-array name="countries_array">
            <item>Afghanistan</item>
            <item>Albania</item>
            <item>Algeria</item>
            <item>American Samoa</item>
            <item>Andorra</item>
            <item>Angola</item>
            <item>Anguilla</item>
            <item>Antarctica</item>
            ...
        </string-array>
    </resources>
  3. В файле Activity или Fragment используйте следующий код, чтобы указать адаптер, который предоставляет подсказки:

    Kotlin

    // Get a reference to the AutoCompleteTextView in the layout.
    val textView = findViewById(R.id.autocomplete_country) as AutoCompleteTextView
    // Get the string array.
    val countries: Array<out String> = resources.getStringArray(R.array.countries_array)
    // Create the adapter and set it to the AutoCompleteTextView.
    ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, countries).also { adapter ->
        textView.setAdapter(adapter)
    }

    Java

    // Get a reference to the AutoCompleteTextView in the layout.
    AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.autocomplete_country);
    // Get the string array.
    String[] countries = getResources().getStringArray(R.array.countries_array);
    // Create the adapter and set it to the AutoCompleteTextView.
    ArrayAdapter<String> adapter =
            new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, countries);
    textView.setAdapter(adapter);

    В примере выше новый объект ArrayAdapter инициализируется для привязки каждого элемента в массиве строк countries_array к объекту TextView, который существует в макете simple_list_item_1. Это макет, предоставляемый Android, который обеспечивает стандартный внешний вид текста в списке.

  4. Назначьте адаптер объекту AutoCompleteTextView, вызвав метод setAdapter().