Określ typ metody wprowadzania

Wypróbuj Compose
Jetpack Compose to zalecany zestaw narzędzi UI dla Androida. Dowiedz się, jak używać dotyku i wprowadzania w Compose.

Każde pole tekstowe oczekuje określonego typu danych wejściowych, np. adresu e-mail, numeru telefonu lub zwykłego tekstu. W przypadku każdego pola tekstowego w aplikacji musisz określić typ danych wejściowych, aby system wyświetlał odpowiednią programową metodę wprowadzania, np. klawiaturę ekranową.

Oprócz typu przycisków dostępnych w metodzie wprowadzania możesz określić zachowania, takie jak to, czy metoda wprowadzania ma podpowiadać sugestie pisowni, rozpoczynać nowe zdania wielką literą i zastępować przycisk przejścia do nowej linii przyciskiem polecenia, np. Gotowe lub Dalej. Na tej stronie dowiesz się, jak określić te cechy.

Określanie typu klawiatury

Zawsze deklaruj metodę wprowadzania dla pól tekstowych, dodając atrybut do elementu.android:inputType<EditText>

wpisywanie na telefonie,
Rysunek 1. Typ danych wejściowych phone.

Jeśli na przykład chcesz użyć metody wprowadzania do wpisywania numeru telefonu, użyj wartości "phone":

<EditText
    android:id="@+id/phone"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:hint="@string/phone_hint"
    android:inputType="phone" />
Typ danych wejściowych textPassword
Rysunek 2. Typ danych wejściowych textPassword.

Jeśli pole tekstowe jest przeznaczone na hasło, użyj wartości "textPassword", aby pole tekstowe ukrywało dane wejściowe użytkownika:

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

Istnieje kilka możliwych wartości udokumentowanych w atrybucie android:inputType. Możesz połączyć niektóre z nich, aby określić wygląd metody wprowadzania i dodatkowe zachowania.

Włączanie sugestii pisowni i innych zachowań

autokorekta
Rysunek 3. Dodanie textAutoCorrect włącza autokorektę błędów pisowni.

Atrybut android:inputType umożliwia określenie różnych zachowań metody wprowadzania. Co najważniejsze, jeśli pole tekstowe jest przeznaczone do wprowadzania podstawowego tekstu, np. wiadomości tekstowej, włącz automatyczną korektę pisowni za pomocą wartości "textAutoCorrect".

Za pomocą atrybutu android:inputType możesz łączyć różne zachowania i style metody wprowadzania. Oto na przykład, jak utworzyć pole tekstowe, które rozpoczyna zdanie wielką literą i automatycznie poprawia błędy pisowni:

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

Określanie działania metody wprowadzania

Większość metod wprowadzania programowego udostępnia w dolnym rogu przycisk polecenia odpowiedni dla bieżącego pola tekstowego. Domyślnie system używa tego przycisku do działania Dalej lub Gotowe, chyba że pole tekstowe obsługuje tekst wielowierszowy, np. za pomocą android:inputType="textMultiLine". W takim przypadku przycisk polecenia jest przejściem do nowej linii. Możesz jednak określić inne działania, które mogą być bardziej odpowiednie dla Twojego pola tekstowego, np. Wyślij lub Przejdź.

Aby określić przycisk polecenia klawiatury, użyj atrybutu android:imeOptions z wartością działania, np. "actionSend" lub "actionSearch". Przykład:

przycisk wysyłania,
Rysunek 4. Gdy zadeklarujesz android:imeOptions="actionSend",
pojawi się przycisk Wyślij.
<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" />

Następnie możesz nasłuchiwać naciśnięcia przycisku polecenia, definiując TextView.OnEditorActionListener dla elementu EditText. W detektorze odpowiedz na odpowiedni identyfikator działania IME zdefiniowany w klasie EditorInfo, np. IME_ACTION_SEND, jak pokazano w tym przykładzie:

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;
    }
});

Podawanie sugestii autouzupełniania

Jeśli chcesz podawać użytkownikom sugestie podczas pisania, możesz użyć podklasy EditText o nazwie AutoCompleteTextView. Aby zaimplementować autouzupełnianie, musisz określić Adapter, który będzie podawać sugestie tekstowe. Dostępnych jest kilka adapterów, w zależności od tego, skąd pochodzą dane, np. z bazy danych lub tablicy.

sugestie tekstowe,
Rysunek 5. Przykład AutoCompleteTextView z sugestiami tekstowymi.

Poniższa procedura opisuje, jak skonfigurować AutoCompleteTextView, który podaje sugestie z tablicy za pomocą ArrayAdapter:

  1. Dodaj AutoCompleteTextView do układu. Oto układ zawierający tylko pole tekstowe:
    <?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. Zdefiniuj tablicę zawierającą wszystkie sugestie tekstowe. Oto na przykład tablica nazw krajów:
    <?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. W Activity lub Fragment użyj tego kodu, aby określić adapter, który będzie podawać sugestie:

    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);

    W poprzednim przykładzie inicjowany jest nowy ArrayAdapter, aby powiązać każdy element tablicy tekstowej countries_array z elementem TextView, który znajduje się w układzie simple_list_item_1. Jest to układ udostępniany przez Androida, który zapewnia standardowy wygląd tekstu na liście.

  4. Przypisz adapter do AutoCompleteTextView, wywołując setAdapter().