InputType, metin alanları için giriş verilerinin doğasını ve klavye davranışını belirleyen bir Android niteliğidir. InputType değeri, giriş sınıfını (metin, sayı, telefon, tarih) ve değiştiricileri (çok satırlı, otomatik düzeltme, büyük harf, gizli giriş) birleştiren bir bit maskesidir. InputType, görüntülenen klavye türünü, giriş karakteri filtrelemesini ve otomatik doldurma davranışını etkiler. Android Developers (2026)'a göre InputType, doğru veri girişini sağlamak için en önemli niteliklerden biridir ve her düzenlenebilir metin alanı için açıkça ayarlanmalıdır.
Önemli çıkarımlar
InputType, bir metin alanı için giriş modunu kodlayan bir tamsayı sabitidir (Int). Android'de android.text.InputType sınıfında tanımlanmıştır. InputType değeri iki bölümden oluşur: giriş sınıfı (bit 0–4) ve değiştiriciler (bit 5–31). Giriş sınıfı temel veri türünü tanımlar — metin, sayı, telefon, tarih. Değiştiriciler, seçilen sınıf içindeki davranışı belirler — örneğin, metin sınıfı için otomatik düzeltme, büyük harf veya çok satırlı girişi etkinleştirebilirsiniz.
InputType mekanizması üç düzeyde çalışır: Android çerçevesi düzeyinde, hangi InputConnection'un oluşturulacağını (EditText ve IME arasındaki bağlantı) belirler; IME (klavye) düzeyinde, hangi karakterlerin görüntüleneceğini ve girişin nasıl işleneceğini belirtir; uygulama düzeyinde, EditText'e yerleşik InputFilter aracılığıyla karakterleri filtreler. Android Source Code (AOSP, 2026)'ya göre bit maskesi, geçerli değeri döndüren TextView.getInputType() yöntemi ve dahili filtreleri ve IME bağlantısını yeniden yapılandıran setInputType() içinde işlenir.
InputType'ın önemli bir özelliği, güvenlik nedenleriyle başka bir işlemden okunamamasıdır. Bu, giriş türüne erişim yoluyla veri hırsızlığını (örneğin, bir alanın parola olup olmadığını belirleme) önler. Başka bir uygulamadan InputType okumaya çalışıldığında, varsayılan olarak TYPE_CLASS_TEXT döndürülür.
// Temel InputType sabitleri
InputType.TYPE_CLASS_TEXT // 0x0001 = 1
InputType.TYPE_CLASS_NUMBER // 0x0002 = 2
InputType.TYPE_CLASS_PHONE // 0x0003 = 3
InputType.TYPE_CLASS_DATETIME // 0x0004 = 4
// Sınıfı çıkarmak için maske
InputType.TYPE_MASK_CLASS // 0x0000000F
Android dört temel InputType sınıfı tanımlar. Her sınıf belirli bir veri kategorisine karşılık gelir ve ilgili klavye türünü etkinleştirir. Sınıf, bit maskesinin 0–4. bitlerinde belirtilir ve TYPE_MASK_CLASS (0x0F) maskesi aracılığıyla çıkarılabilir.
| Sınıf | Sabit | Klavye | Kullanım |
|---|---|---|---|
| TEXT | TYPE_CLASS_TEXT (1) | QWERTY klavye | Metin, yorumlar, açıklama |
| NUMBER | TYPE_CLASS_NUMBER (2) | Sayısal | Miktar, fiyat, yaş |
| PHONE | TYPE_CLASS_PHONE (3) | Telefon | Telefon numarası |
| DATETIME | TYPE_CLASS_DATETIME (4) | Tarih/saat | Tarih, saat |
TYPE_CLASS_DATETIME doğrudan nadiren kullanılır — tarih girişi için genellikle metin alanı yerine DatePicker veya DatePickerDialog kullanılır. Ancak bazı senaryolarda (hızlı manuel tarih girişi), bu sınıf yararlı olabilir. Özel bir klavyesi yoktur ve genellikle sayısal bir klavye görüntüler.
Her giriş sınıfı, varyasyonlarla (bit 5–7'de belirtilen alt türler) birleştirilebilir. Örneğin, TYPE_TEXT_VARIATION_PASSWORD (bit 5), TEXT sınıfına gizli giriş ekler. Varyasyon bitleri: 0x000000E0 (TYPE_MASK_VARIATION maskesi).
Değiştirici bayrakları (bit 8–31), temel sınıfa ek yetenekler ekler. Klavye türünü değiştirmezler ancak giriş davranışını değiştirirler. Bayraklar her sınıfa özgüdür — TEXT bayrakları NUMBER ile çalışmaz ve bunun tersi de geçerlidir. Aşağıda her sınıf için ana değiştiriciler listelenmiştir.
Android Developers Documentation (2026)'ya göre, farklı sınıfların bayrakları örtüşmez — NUMBER ile TEXT bayrağı kullanma girişimi yok sayılır. Ayarlanmış bir bayrağı kontrol etmek için bitsel VE kullanın: (inputType and FLAG) != 0.
InputType sınıflarının ve bayraklarının doğru kombinasyonu, kullanıcı dostu formlar oluşturmanın anahtarıdır. Tipik senaryolara ve bunlara karşılık gelen InputType yapılandırmalarına bakalım. Her senaryo, belirli bir veri türü için girişi optimize eder, formu sezgisel hale getirir ve doldurmayı hızlandırır.
| Senaryo | InputType | Klavye |
|---|---|---|
| İsim | textCapWords | QWERTY, her kelime büyük harfli |
| E-posta | textEmailAddress | QWERTY @ ve . ile |
| Parola | textPassword | QWERTY, gizli giriş |
| Telefon | phone | Rakamlar +, #, * ile |
| Fiyat | numberDecimal | Ondalıklı rakamlar |
| Miktar | number | Sadece rakamlar |
| Yorum | textCapSentences|textMultiLine | QWERTY, çok satırlı |
| Arama | text|textNoSuggestions | QWERTY önerisiz |
// Fiyat alanı için kombinasyon
editText.inputType = InputType.TYPE_CLASS_NUMBER or
InputType.TYPE_NUMBER_FLAG_DECIMAL
// Yorum alanı için kombinasyon
editText.inputType = InputType.TYPE_CLASS_TEXT or
InputType.TYPE_TEXT_FLAG_CAP_SENTENCES or
InputType.TYPE_TEXT_FLAG_MULTI_LINE
setInputType() aracılığıyla programatik olarak InputType ayarlamak önceki değerin üzerine yazar. Maskenin yalnızca bir kısmını değiştirmeniz gerekiyorsa (örneğin, bir bayrak eklemek), geçerli değeri kaydetmeli, değiştirmeli ve tekrar uygulamalısınız. Her setInputType() çağrısı, EditText'in dahili filtrelerini yeniden yapılandırır.
setRawInputType() yöntemi, filtrelerin ve önerilerin yeniden yapılandırmasını tetiklememesi açısından setInputType'dan farklıdır. EditText durumunu tamamen yeniden yüklemeden InputType'ı geçici olarak değiştirmek için kullanılır. setInputType() çağrısından sonra, klavyeyi güncellemek için IME'nin yeniden başlatılması önerilir.
// Parola ve görünür metin arasında geçiş yap
fun togglePasswordVisibility(editText: EditText) {
val currentType = editText.inputType
val isPassword = (currentType and
InputType.TYPE_TEXT_VARIATION_PASSWORD) != 0
editText.inputType = if (isPassword) {
InputType.TYPE_CLASS_TEXT or
InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD
} else {
InputType.TYPE_CLASS_TEXT or
InputType.TYPE_TEXT_VARIATION_PASSWORD
}
// İmleç konumunu koru
val cursorPos = editText.selectionStart
editText.setSelection(cursorPos)
}
// Giriş sınıfını al
fun getInputClass(inputType: Int): Int {
return inputType and InputType.TYPE_MASK_CLASS
}
// Giriş varyasyonunu al
fun getInputVariation(inputType: Int): Int {
return inputType and InputType.TYPE_MASK_VARIATION
}
// Parola alanı olup olmadığını kontrol et
fun isPasswordField(editText: EditText): Boolean {
return (editText.inputType and
InputType.TYPE_TEXT_VARIATION_PASSWORD) != 0
}
Doğru InputType'ı seçmek yalnızca UX ile ilgili değil, aynı zamanda güvenlik ve veri doğruluğu ile de ilgilidir. Temel öneriler şunları içerir: her EditText için her zaman açık bir InputType belirtin; mümkün olan en spesifik giriş sınıfını kullanın; farklı sınıflardan bayrakları birleştirmeyin; hassas veri alanları için PASSWORD varyasyonları kullanın; arama alanları için imeOptions="actionSearch" kullanın.
InputType ayrıca erişilebilirlik hizmetlerinin (Accessibility) çalışmasını da etkiler. textPassword türündeki alanlar, ekran okuyuculardan ek koruma alır — girilen karakterleri sesli okumazlar. textEmailAddress alanları için ekran okuyucu, kullanıcıya alanın e-posta için olduğunu bildirir ve uygun öneriler sunar.
Material Design Guidelines (2025)'a göre InputType, kullanıcının girdiği veri türüyle eşleşmelidir. Yanlış InputType yalnızca girişi yavaşlatmakla kalmaz, aynı zamanda hatalara da yol açabilir: örneğin, bir telefon numarası alanı için textMultiLine bırakırsanız, klavye sayısal tuş takımını göstermez ve kullanıcı her seferinde manuel olarak düzen değiştirmek zorunda kalır.
Sıkça Sorulan Sorular
InputType, bir bit maskesi aracılığıyla giriş verilerinin türünü tanımlayan bir EditText niteliğidir. Keyboard Type, InputType tarafından etkinleştirilen görsel klavye türü için resmi olmayan bir addır. InputType, yalnızca klavye düzenini değil, aynı zamanda karakter filtreleme, otomatik düzeltme ve otomatik tamamlamayı da etkiler.
editText.inputType = InputType.TYPE_CLASS_TEXT ayarlayın veya tam sıfırlama için InputType.TYPE_NULL (0x00000000) sabitini kullanın. TYPE_NULL ile alan, odaklandığında klavye göstermez. Standart metin girişine dönmek için bayraksız TYPE_CLASS_TEXT ayarlayın.
Yeni bir InputType sınıfı oluşturamazsınız çünkü Android çerçevesinin bir parçasıdır. Ancak, istenen davranışı elde etmek için mevcut sınıfları ve bayrakları birleştirebilirsiniz. setFilters() yöntemiyle EditText'e ayarlanan InputFilter aracılığıyla ek karakter filtreleme uygulayın.
InputType, InputConnection aracılığıyla giriş sistemine iletilir. IME, InputType sınıfını ve varyasyonunu okur ve ilgili klavye düzenini seçer. Örneğin, TYPE_CLASS_NUMBER ile TYPE_NUMBER_FLAG_DECIMAL, klavyenin ondalık noktalı sayısal bir tuş takımı göstermesine neden olur. Modern klavyelerin çoğu bu önerilere uyar.
Kotlin'de editText.inputType özelliğini veya Java'da editText.getInputType() yöntemini kullanın. Sınıfı çıkarmak için maskeyi uygulayın: inputType and InputType.TYPE_MASK_CLASS. Belirli bir bayrağı kontrol etmek için: inputType and InputType.TYPE_TEXT_FLAG_MULTI_LINE — sonuç != 0 ise bayrak ayarlanmıştır.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun