Keyboard Type — to konfiguracja wirtualnej klawiatury w Androidzie, określająca zestaw wyświetlanych znaków i układ dla konkretnego pola wprowadzania. Android obsługuje wiele predefiniowanych typów: text (standardowa tekstowa), number (cyfrowa), phone (telefoniczna), email (ze znakiem @), textPassword (dla haseł), datetime i inne. Każdy typ optymalizuje interfejs wprowadzania pod konkretne zadanie — na przykład klawiatura email pokazuje znak @ i kropkę na głównym ekranie. Według danych Android Developers (2026), prawidłowy wybór Keyboard Type zmniejsza liczbę naciśnięć podczas wprowadzania o 20–40% w porównaniu ze standardową klawiaturą tekstową.
Najważniejsze
Keyboard Type jest określany przez wartość atrybutu android:inputType w XML lub programowe wywołanie setInputType() w kodzie. InputType to maska bitowa, gdzie klasa wprowadzania (klasa) jest łączona z flagami-modyfikatorami. Podstawowe klasy: TYPE_CLASS_TEXT dla tekstu, TYPE_CLASS_NUMBER dla liczb, TYPE_CLASS_PHONE dla telefonów, TYPE_CLASS_DATETIME dla dat i czasu.
Każdy Keyboard Type wpływa na trzy aspekty: układ wirtualnej klawiatury (które znaki są widoczne na głównym ekranie), filtrację wprowadzanych znaków (które znaki są dozwolone) oraz zachowanie autokorekty/autouzupełniania. Na przykład klawiatura number wyświetla tylko cyfry i separator dziesiętny, a nie pokazuje liter, nawet jeśli użytkownik przełączy tryb. Według danych Android Developers Documentation (2026), łączenie klas z flagami pozwala tworzyć wyspecjalizowane tryby: tekst wieloliniowy z autokorektą, liczba zmiennoprzecinkowa, hasło z możliwością autouzupełniania.
Ważne jest, aby zrozumieć, że Keyboard Type to zalecenie dla systemu wprowadzania (IME). Niektóre klawiatury firm trzecich (Gboard, SwiftKey) mogą częściowo ignorować określony typ, jeśli użytkownik skonfigurował własne preferencje. Jednak większość standardowych klawiatur Android i Google Gboard ściśle przestrzega określonego typu wprowadzania.
// Programistyczna konfiguracja typu klawiatury
editText.inputType = InputType.TYPE_CLASS_NUMBER or
InputType.TYPE_NUMBER_FLAG_DECIMAL or
InputType.TYPE_NUMBER_FLAG_SIGNED
TYPE_CLASS_TEXT — podstawowa klasa do wprowadzania tekstu. Aktywuje standardową klawiaturę QWERTY z literami, cyframi i symbolami. Klasa Text ma najwięcej modyfikatorów, które precyzują zachowanie: TYPE_TEXT_FLAG_CAP_SENTENCES (automatyczna wielka litera na początku zdania), TYPE_TEXT_FLAG_AUTO_CORRECT (autokorekta), TYPE_TEXT_FLAG_MULTI_LINE (tryb wieloliniowy), TYPE_TEXT_FLAG_NO_SUGGESTIONS (wyłączenie podpowiedzi).
Modyfikatory klawiatury tekstowej można łączyć, tworząc precyzyjną konfigurację: na przykład text|textCapSentences|textAutoCorrect nadaje się do pola wprowadzania komentarza, gdzie potrzebna jest automatyczna wielka litera i korekta błędów. Natomiast text|textNoSuggestions jest używane do wprowadzania kodu lub specjalnych terminów, gdzie autokorekta może zaszkodzić.
Według danych UX Stack Exchange (2025), klawiatura tekstowa z włączoną autokorektą przyspiesza wprowadzanie o 15–25% dla przeciętnego użytkownika, ale dla terminów technicznych (kod, URL, email) zaleca się wyłączenie autokorekty, ponieważ często zastępuje ona poprawne terminy błędnymi.
<!-- Text with autocorrect and capital sentences -->
android:inputType="textCapSentences|textAutoCorrect"
<!-- Text without suggestions and autocorrect -->
android:inputType="textNoSuggestions"
TYPE_CLASS_NUMBER aktywuje klawiaturę cyfrową, która wyświetla tylko cyfry, separator dziesiętny i znak minusa. Ten typ jest używany do pól wprowadzania ilości, cen, wieku, kodów i innych danych liczbowych. Klawiatura cyfrowa zajmuje mniej miejsca na ekranie niż tekstowa i eliminuje przypadkowe wprowadzanie liter.
Number ma trzy modyfikatory: TYPE_NUMBER_FLAG_DECIMAL dodaje separator dziesiętny (kropkę/przecinek), TYPE_NUMBER_FLAG_SIGNED dodaje znak minusa dla liczb ujemnych, TYPE_NUMBER_VARIATION_PASSWORD — dla kodów PIN, gdzie cyfry są wyświetlane jako ukryte symbole. Kombinacja number|numberDecimal|numberSigned tworzy pełnoprawne pole do wprowadzania liczb zmiennoprzecinkowych dowolnego znaku.
// Wprowadzanie numeryczne z separatorem dziesiętnym
editText.inputType = InputType.TYPE_CLASS_NUMBER or
InputType.TYPE_NUMBER_FLAG_DECIMAL
// Sprawdź wprowadzoną liczbę
val amount = editText.text.toString().toDoubleOrNull() ?: 0.0
TYPE_CLASS_PHONE aktywuje klawiaturę telefoniczną, która wyświetla cyfry i znaki charakterystyczne dla numerów telefonów: +, #, *, (, ). W przeciwieństwie do klawiatury number, phone pokazuje również układ liter w dodatkowym trybie, ponieważ numery telefonów mogą zawierać litery (na przykład 1-800-FLOWERS). Klasa phone nie ma dodatkowych flag, ale obsługuje TYPE_TEXT_VARIATION_PHONE_ETC do wprowadzania numerów wewnętrznych.
TYPE_TEXT_VARIATION_EMAIL_ADDRESS aktywuje klawiaturę email, na której znak @ i kropka znajdują się na głównym ekranie, a także dostępne są częste rozszerzenia domen (.com, .net, .org). Gboard dodatkowo pokazuje przyciski z popularnymi domenami podczas wprowadzania po @. Klawiatura email automatycznie wyłącza autokorektę, ponieważ adresy email mogą zawierać niestandardowe kombinacje znaków.
Według danych Google Material Design Guidelines (2025), dla pól telefonu zaleca się dodatkowo podanie atrybutu android:digits, który ogranicza zestaw dozwolonych znaków. Dla pól email ważne jest również podanie autofillHints="email" w celu obsługi autouzupełniania przez menedżer haseł i Google Autofill.
<!-- Email keyboard with autofill -->
android:inputType="textEmailAddress"
android:importantForAutofill="yes"
android:autofillHints="emailAddress"
<!-- Phone keyboard with digit restriction -->
android:inputType="phone"
android:digits="0123456789+"
TYPE_TEXT_VARIATION_PASSWORD i TYPE_NUMBER_VARIATION_PASSWORD — to tryby wprowadzania danych poufnych. Przy ustawieniu textPassword wprowadzane znaki są wyświetlane jako kropki lub gwiazdki (zależnie od wersji Androida i klawiatury). Klawiatura w tym trybie wyłącza autokorektę i zapisywanie wprowadzonych słów w słowniku użytkownika, zapobiegając wyciekowi hasła przez funkcje predykcyjnego wprowadzania.
Password klawiatura wyłącza również możliwość robienia zrzutu ekranu zawartości pola (flaga FLAG_SECURE), chociaż to zachowanie zależy od implementacji konkretnej klawiatury. Od Androida 8.0 (API 26) klawiatury password obsługują autouzupełnianie przez menedżery haseł, jeśli ustawiony jest atrybut importantForAutofill="yes".
Według danych Android Security Recommendations (2025), dla pól haseł zaleca się również: ustawienie maxLength w celu zapobiegania bardzo długim hasłom (które mogą być atakiem na bazę danych), użycie inputType="textPassword" wraz z TextInputLayout i endIconMode="password_toggle", aby użytkownik mógł sprawdzić wprowadzone hasło przed wysłaniem formularza.
<!-- Password field with show/hide icon -->
@+id/tilPasswordField
app:endIconMode="password_toggle">
@+id/etPasswordField
android:inputType="textPassword"
android:maxLength="64"
android:importantForAutofill="yes" />
</com.google.android.material.textfield.TextInputLayout>
Programowa konfiguracja Keyboard Type pozwala dynamicznie zmieniać tryb klawiatury w zależności od kontekstu lub wprowadzonych danych przez użytkownika. Na przykład przy przełączaniu typu pola (tekst/liczba/data) lub przy zmianie lokalizacji. Metoda setInputType() przyjmuje maskę bitową InputType i natychmiast aktualizuje klawiaturę, jeśli pole jest w fokusie.
// Przełączanie między wprowadzaniem tekstu i liczb
fun switchInputType(field: EditText, isNumeric: Boolean) {
field.inputType = if (isNumeric) {
InputType.TYPE_CLASS_NUMBER or
InputType.TYPE_NUMBER_FLAG_DECIMAL
} else {
InputType.TYPE_CLASS_TEXT or
InputType.TYPE_TEXT_FLAG_CAP_SENTENCES
}
field.setSelection(field.text.length)
}
// Sprawdź, czy pole jest numeryczne
fun isNumericInput(field: EditText): Boolean {
val type = field.inputType
return (type and InputType.TYPE_MASK_CLASS) ==
InputType.TYPE_CLASS_NUMBER
}
// Sprawdź, czy autokorekta jest włączona
fun isAutoCorrectEnabled(field: EditText): Boolean {
return (field.inputType and
InputType.TYPE_TEXT_FLAG_AUTO_CORRECT) != 0
}
Często zadawane pytania
Jeśli inputType nie jest określony, EditText domyślnie używa TYPE_CLASS_TEXT z flagą TYPE_TEXT_FLAG_MULTI_LINE. Oznacza to standardową klawiaturę QWERTY i wprowadzanie wieloliniowe. Dla większości pól zaleca się jawne określenie inputType, aby zapewnić prawidłowe zachowanie klawiatury i filtrację znaków.
Użyj atrybutu android:imeOptions="actionDone" na EditText. Zamieni to przycisk Enter na przycisk Done. Inne opcje: actionSearch (lupa), actionNext (strzałka w prawo), actionSend (wysyłanie). Obsługę naciśnięcia zaimplementuj przez OnEditorActionListener w kodzie.
Nie można wyłączyć wibracji dla konkretnego pola — to ustawienie systemowe, zarządzane przez użytkownika w ustawieniach klawiatury. Można jednak całkowicie zapobiec pojawieniu się klawiatury, ustawiając na EditText atrybut android:focusable="false" lub anulując wyświetlanie przez dispatchTouchEvent.
Ustaw android:inputType="none" lub programowo wywołaj editText.setKeyListener(null). Pole będzie wyświetlać tekst, ale klawiatura nie pojawi się przy fokusie. Użytkownik będzie mógł zaznaczyć i skopiować tekst, ale nie zmienić go. Alternatywą jest użycie TextView z textIsSelectable="true".
Po wywołaniu setInputType() należy ponownie pokazać klawiaturę, ponieważ system może nie zaktualizować IME automatycznie. Wywołaj InputMethodManager.restartInput(view) w celu wymuszonej aktualizacji. Jeśli pole nie jest w fokusie, najpierw wywołaj requestFocus(), a następnie restartInput.
Podsumowanie
Opracujemy aplikację mobilną pod klucz
IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.
Przeczytaj również