InputType — nedir, giriş nitelikleri ve Android'de yapılandırılması

Yazar: IT Sectr Yayınlanma: 2026-07-07 Okuma süresi: 9 dk

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 — EditText için giriş sınıfını ve değiştiricileri tanımlayan bir bit maskesi.
  • Giriş sınıfları — TYPE_CLASS_TEXT, TYPE_CLASS_NUMBER, TYPE_CLASS_PHONE, TYPE_CLASS_DATETIME.
  • Değiştiriciler — davranışı belirleyen bayraklar: MULTI_LINE, AUTO_CORRECT, PASSWORD, CAP_SENTENCES.
  • Birleştirme — sınıf ve değiştiriciler, hassas yapılandırma için bitsel VEYA ile birleştirilir.
  • Etki — doğru InputType girişi hızlandırır, hataları azaltır ve form UX'ini iyileştirir.

Android'de InputType Nedir

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.

kotlin
// 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

InputType Sınıfları: TEXT, NUMBER, PHONE, DATETIME

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ıfSabitKlavyeKullanım
TEXTTYPE_CLASS_TEXT (1)QWERTY klavyeMetin, yorumlar, açıklama
NUMBERTYPE_CLASS_NUMBER (2)SayısalMiktar, fiyat, yaş
PHONETYPE_CLASS_PHONE (3)TelefonTelefon numarası
DATETIMETYPE_CLASS_DATETIME (4)Tarih/saatTarih, 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).

InputType Değiştirici Bayrakları

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.

TEXT için Bayraklar

  • TYPE_TEXT_FLAG_CAP_CHARACTERS — tüm harfler büyük.
  • TYPE_TEXT_FLAG_CAP_WORDS — her kelime büyük harfle başlar.
  • TYPE_TEXT_FLAG_CAP_SENTENCES — cümle başında büyük harf (varsayılan).
  • TYPE_TEXT_FLAG_AUTO_CORRECT — otomatik yazım hatası düzeltme.
  • TYPE_TEXT_FLAG_AUTO_COMPLETE — otomatik tamamlama (AutoCompleteTextView için).
  • TYPE_TEXT_FLAG_MULTI_LINE — çok satırlı giriş.
  • TYPE_TEXT_FLAG_NO_SUGGESTIONS — önerileri devre dışı bırak.

NUMBER için Bayraklar

  • TYPE_NUMBER_FLAG_SIGNED — negatif sayılara izin verir (eksi işareti).
  • TYPE_NUMBER_FLAG_DECIMAL — ondalık noktaya izin verir.

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 Kombinasyonları: Farklı Senaryolar için Örnekler

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.

SenaryoInputTypeKlavye
İsimtextCapWordsQWERTY, her kelime büyük harfli
E-postatextEmailAddressQWERTY @ ve . ile
ParolatextPasswordQWERTY, gizli giriş
TelefonphoneRakamlar +, #, * ile
FiyatnumberDecimalOndalıklı rakamlar
MiktarnumberSadece rakamlar
YorumtextCapSentences|textMultiLineQWERTY, çok satırlı
Aramatext|textNoSuggestionsQWERTY önerisiz
kotlin
// 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

InputType ile Programatik Çalışma

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.

Mod Değiştirme

kotlin
// 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)
}

Sınıf ve Varyasyon Çıkarma

kotlin
// 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
}

InputType Seçimi için En İyi Uygulamalar

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.

  • Açıklık — InputType'ı her zaman açıkça ayarlayın, varsayılan değere (textMultiLine) güvenmeyin.
  • Özgüllük — en spesifik türü kullanın: e-posta için text değil, textEmailAddress.
  • Güvenlik — parolalar, PIN'ler ve kart verileri için PASSWORD varyasyonlarını kullanın.
  • Otomatik doldurma — parola yöneticilerini desteklemek için InputType'ı autofillHints ile birleştirin.
  • Test — farklı klavyelerde (Gboard, SwiftKey, Samsung Keyboard) davranışı test edin.

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, Keyboard Type'dan nasıl farklıdır?

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.

InputType varsayılan değere nasıl sıfırlanır?

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.

Özel bir InputType oluşturabilir miyim?

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 IME'yi (klavye) nasıl etkiler?

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.

Çalışma zamanında InputType nasıl kontrol edilir?

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

  • InputType — bir giriş sınıfı (TEXT, NUMBER, PHONE, DATETIME) ve değiştiricilerden oluşan bir bit maskesi.
  • Giriş sınıfı temel veri türünü ve görüntülenen klavye türünü tanımlar.
  • Değiştiriciler davranışı belirler: çok satırlı, otomatik düzeltme, büyük harf, gizli giriş.
  • Bitsel VEYA ile birleştirme, farklı senaryolar için hassas yapılandırmalar oluşturmayı sağlar.
  • PASSWORD varyasyonları otomatik düzeltmeyi devre dışı bırakır, karakterleri gizler ve sözlük depolamayı önler.
  • Programatik ayarlama setInputType() ile klavyeyi güncellemek için IME'nin yeniden başlatılmasını gerektirir.
  • En iyi uygulamalar — InputType'ı açıkça ayarlayın, belirli türler kullanın ve farklı klavyelerde test edin.

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.

Projeyi tartış

Ayrıca okuyun