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 korzystać z dotyku i wprowadzania w sekcji Utwórz

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

Oprócz typu przycisków dostępnych w przypadku danej metody wprowadzania możesz określić zachowania, takie jak to, czy metoda wprowadzania oferuje sugestie pisowni, nowe zdania rozpoczynają się wielkimi literami czy powoduje zastępowanie przycisku powrotu karetki jednym z przycisków polecenia, np. Gotowe lub Dalej. Tutaj dowiesz się, jak określić te cechy.

Określanie typu klawiatury

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

wprowadzanie danych z telefonu
Rysunek 1. Typ danych wejściowych phone.

Jeśli na przykład chcesz używać 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 wprowadzania textPassword
Rysunek 2. Typ danych wejściowych textPassword.

Jeśli pole tekstowe jest na hasło, użyj wartości "textPassword", by ukryć 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 za pomocą atrybutu android:inputType. Niektóre z nich możesz łączyć, aby określić wygląd metody wprowadzania i dodatkowe zachowania.

Włącz propozycje pisowni i inne działania

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

Atrybut android:inputType pozwala określić różne zachowania metody wprowadzania. Jeśli Twoje pole tekstowe jest przeznaczone do podstawowego wprowadzania 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 metod wprowadzania. Oto jak utworzyć pole tekstowe z wielkimi literami pierwszego wyrazu i poprawić 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ść metod niepłynnego wprowadzania ma w dolnym rogu przycisk polecenia użytkownika, który pasuje do 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 przycisk polecenia powoduje przejście do nowej linii. Możesz jednak określić inne działania, które lepiej sprawdzą się w przypadku Twojego pola tekstowego, np. Wyślij lub Przejdź.

Aby określić przycisk polecenia na klawiaturze, 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 zadeklarowaniu domeny 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" />

Aby wykrywać naciśnięcia przycisku polecenia, zdefiniuj parametr TextView.OnEditorActionListener dla elementu EditText. W nasłuchującym odpowiedz na odpowiedni identyfikator działania IME zdefiniowany w klasie EditorInfo, taki jak 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;
    }
});

wyświetlać sugestie autouzupełniania,

Jeśli chcesz oferować sugestie użytkownikom podczas pisania, możesz użyć podklasy EditText o nazwie AutoCompleteTextView. Aby zaimplementować autouzupełnianie, musisz podać element Adapter zawierający sugestie tekstowe. Dostępnych jest kilka adapterów dostosowanych do różnych źródeł danych, np. z bazy danych lub tablicy.

sugestie dotyczące SMS-ów
Rysunek 5. Przykład elementu AutoCompleteTextView z sugestiami dotyczącymi tekstu.

Poniżej opisujemy, jak skonfigurować element AutoCompleteTextView, który dostarcza sugestie z tablicy za pomocą ArrayAdapter:

  1. Dodaj AutoCompleteTextView do układu. Oto 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ę zawierającą wszystkie sugestie tekstu. Oto na przykład tablica z nazwami 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 obsługujący 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 zainicjowano nowy element ArrayAdapter w celu powiązania każdego elementu w tablicy countries_array z ciągiem TextView występującym 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 metodę setAdapter().