Określ typ metody wprowadzania

Wypróbuj sposób tworzenia wiadomości
Jetpack Compose to zalecany zestaw narzędzi UI na Androida. Dowiedz się, jak w funkcji tworzenia wiadomości używać dotyku i wprowadzania tekstu.

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

Oprócz typów przycisków dostępnych w przypadku metody wprowadzania możesz określić sposób działania, na przykład to, czy metoda wprowadzania ma wyświetlać sugestie pisowni, pisać wielkimi literami w nowych zdaniach czy zastępować przycisk powrotu karetki przyciskiem polecenia, na przykład Gotowe lub Dalej. Z tego artykułu dowiesz się, jak określić te cechy.

Określ typ klawiatury

Zawsze deklaruj metodę wprowadzania w polach tekstowych, dodając do elementu <EditText> atrybut android:inputType.

Telefon
Rysunek 1. Typ danych wejściowych phone.

Jeśli na przykład potrzebujesz metody wprowadzania 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
Rys. 2. Typ danych wejściowych textPassword.

Jeśli pole tekstowe jest hasłem, użyj wartości "textPassword", by 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 podanych w atrybucie android:inputType. Możesz połączyć niektóre z nich, aby określić wygląd metody wprowadzania i dodatkowe zachowania.

Włącz sugestie pisowni i inne funkcje

autokorekta
Rysunek 3. Dodanie opcji textAutoCorrect umożliwia autokorektę błędów pisowni.

Atrybut android:inputType pozwala określić różne zachowania metody wprowadzania. Najważniejsze jest jednak to, że jeśli pole tekstowe jest przeznaczone do podstawowego wpisywania tekstu (np. w przypadku SMS-a), włącz automatyczną korektę pisowni za pomocą wartości "textAutoCorrect".

Za pomocą atrybutu android:inputType możesz łączyć różne zachowania i style metod wprowadzania. Oto jak utworzyć np. pole tekstowe z wielką literą pierwszego wyrazu i poprawiające błędy pisowni:

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

Określ działanie metody wprowadzania

Większość prostych metod wprowadzania tekstu zawiera w dolnym rogu przycisk polecenia użytkownika, który jest odpowiedni w przypadku bieżącego pola tekstowego. Domyślnie system używa tego przycisku do wykonania działania Dalej lub Gotowe, chyba że pole tekstowe obsługuje tekst wielowierszowy, np. android:inputType="textMultiLine". W takim przypadku przyciskiem polecenia jest przejście do nowej linii. W polu tekstowym możesz jednak określić inne działania, takie jak Wyślij lub OK.

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

przycisk wysyłania
Rysunek 4. Przycisk Wyślij pojawia się po deklaracji 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" />

Następnie możesz nasłuchiwać naciśnięć przycisku polecenia, definiując TextView.OnEditorActionListener dla elementu EditText. W odbiorniku odpowiedz na odpowiedni identyfikator działania IME zdefiniowany w klasie EditorInfo, na przykład IME_ACTION_SEND, jak 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;
    }
});

Sugestie autouzupełniania

Jeśli chcesz wyświetlać sugestie użytkownikom podczas pisania, możesz użyć podklasy EditText o nazwie AutoCompleteTextView. Aby zaimplementować autouzupełnianie, musisz określić właściwość Adapter, która podpowiada tekst. 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 elementu AutoCompleteTextView z sugestiami tekstowymi.

Poniżej opisaliśmy, jak skonfigurować pole AutoCompleteTextView z sugestiami na podstawie tablicy przy użyciu ArrayAdapter:

  1. Dodaj AutoCompleteTextView do układu. Tak wygląda układ z samym polem tekstowym:
    <?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ę, która zawiera wszystkie sugestie tekstowe. Na przykład taka 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 dostarcza 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 element ArrayAdapter w celu powiązania każdego elementu w tablicy ciągu countries_array z TextView istniejącym w układzie simple_list_item_1. Android to układ, który zapewnia standardowy wygląd tekstu na liście.

  4. Przypisz przejściówkę do AutoCompleteTextView, wywołując setAdapter().