EditText, kullanıcı arayüzünde metin girmek ve düzenlemek için tasarlanmış temel bir Android bileşenidir. TextView'den miras alır ve sanal veya fiziksel klavyelerden karakter girişine izin verir. EditText birçok modu destekler: tek satırlı ve çok satırlı metin, parolalar, sayılar, e-posta adresleri ve telefon numaraları. Android Developers (2026)'ya göre EditText, Android uygulamalarının %90'ından fazlasında formlar, arama alanları, sohbetler ve veri giriş ekranları oluşturmak için kullanılır.
Önemli Noktalar
EditText, android.widget paketinden kullanıcı veri girişi için etkileşimli bir metin alanı uygulayan bir sınıftır. Android kalıtım hiyerarşisinde EditText, TextView'i genişletir, bu nedenle yazı tipi, renk ve hizalama yönetimi dahil olmak üzere bir metin etiketinin tüm özelliklerini miras alır. EditText ve TextView arasındaki temel fark, içeriği düzenleme yeteneğidir — kullanıcı arayüzde doğrudan metin girebilir, silebilir ve değiştirebilir.
Her EditText, girilen metni depolayan ve ekleme, silme ve değiştirme işlemlerini destekleyen bir Editable örneği ile ilişkilidir. Yazarken EditText, otomatik olarak imleç konumunu, metin seçimini ve geri al/tekrarla için değişiklik geçmişini yönetir. Android Developers Guide (2026)'ya göre EditText, EditText'ten miras alan AutoCompleteTextView sınıfı aracılığıyla otomatik tamamlamayı da destekler.
EditText mimarisi, model (Editable), görünüm (TextView) ve denetleyici (InputConnection) ayrımına dayanır. Odak aldığında EditText, giriş sisteminin karakterleri, tuş vuruşlarını ve düzenleme komutlarını ilettiği bir InputConnection oluşturur. Bu mekanizma, sanal klavyelerden fiziksel Bluetooth klavyelere ve sesli girişe kadar her giriş yöntemiyle uyumluluk sağlar.
val editText = EditText(context).apply {
hint = "Metin girin"
inputType = InputType.TYPE_CLASS_TEXT
maxLines = 1
setTextColor(Color.parseColor("#000000"))
}
EditText, davranışı ve görünümü ince ayar yapmak için düzinelerce nitelik sağlar. Bunlar hem XML düzenlerinde hem de Kotlin veya Java aracılığıyla programlı olarak ayarlanabilir. Nitelikler kategorilere ayrılır: metin kontrolü, kısıtlamalar, görsel stil ve klavye etkileşimi.
| Nitelik | Açıklama | Örnek değer |
|---|---|---|
| android:hint | Boş alanda görünen ipucu metni | "E-posta girin" |
| android:inputType | Giriş modu (metin, sayı, parola, vb.) | textEmailAddress |
| android:maxLines | Maksimum satır sayısı | 3 |
| android:maxLength | Karakter cinsinden maksimum metin uzunluğu | 100 |
| android:textColorHint | İpucu metninin rengi | #999999 |
android:hint niteliği en önemlilerinden biridir — kullanıcıya alanda hangi verilerin beklendiğini söyler. Metin girildiğinde ipucu otomatik olarak gizlenir. İpucu form gönderimine katılmaz ve alan değeri olarak kaydedilmez. Material Design, daha modern bir görünüm için basit ipucu yerine kayan etiketli TextInputLayout kullanılmasını önerir.
<!-- EditText in XML layout -->
@+id/etEmail
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Enter email"
android:inputType="textEmailAddress"
android:maxLines="1"
android:importantForAutofill="yes" />
inputType niteliği, kullanıcıya hangi klavye türünün gösterileceğini ve giriş için hangi karakterlere izin verildiğini belirler. Giriş sınıfının (TYPE_CLASS_TEXT, TYPE_CLASS_NUMBER, TYPE_CLASS_PHONE) değiştiricilerle birleştirildiği bir bit maskesidir.
Her giriş modu yalnızca klavye düzenini değiştirmekle kalmaz, aynı zamanda metin işlemeyi de etkiler: sayı modunda yalnızca rakamlar ve ondalık ayırıcılara izin verilir, e-posta modunda @ sembolü ve alan adı uzantıları mevcuttur ve telefon modunda rakamlar ve +, #, * sembolleri görüntülenir. Doğru inputType seçimi kullanıcı deneyimini kritik şekilde etkiler — uygun olmayan bir klavye kullanıcıları mod değiştirmeye zorlar ve form doldurma süresini %30-50 oranında artırır.
Material Design Guidelines (2025)'ya göre her alan için en spesifik inputType'ın kullanılması önerilir: parolalar için textPassword, fiyatlar için numberDecimal, telefon numaraları için phone, çok satırlı giriş için textMultiLine. Bu, form doldurmayı hızlandırır ve giriş hatalarını azaltır.
// Programlı inputType kurulumu
editText.inputType = InputType.TYPE_CLASS_TEXT or
InputType.TYPE_TEXT_FLAG_CAP_SENTENCES or
InputType.TYPE_TEXT_FLAG_AUTO_CORRECT
TextWatcher, EditText'teki metin değişikliklerini gerçek zamanlı olarak izlemek için bir arayüzdür. Üç yöntem içerir: beforeTextChanged bir değişiklikten önce çağrılır, onTextChanged değişiklik sırasında çağrılır, afterTextChanged metin değişikliği tamamlandıktan sonra çağrılır. TextWatcher, giriş doğrulaması, karakter sayma, arama ve otomatik tamamlama için kullanılır.
OnEditorActionListener, klavyedeki kullanıcı eylemlerini işler: Done (IME_ACTION_DONE), Search (IME_ACTION_SEARCH), Send (IME_ACTION_SEND), Next (IME_ACTION_NEXT) ve diğerlerine basma. Bu dinleyici, form navigasyonunu düzenlemek için özellikle kullanışlıdır — Next'e basıldığında odak otomatik olarak sonraki alana geçer ve Done'a basıldığında klavye gizlenir ve gönderim gerçekleştirilir.
Android Developers Blog (2025)'a göre, android:imeOptions niteliğiyle OnEditorActionListener'ın doğru kullanımı, ek gönder düğmesi olmadan sezgisel formlar oluşturmayı sağlar — kullanıcı alanları doldurur ve klavyede Done'a basar, bu da kaydetmeyi veya aramayı tetikler.
// E-posta doğrulaması için TextWatcher
editText.addTextChangedListener(object : TextWatcher {
override fun afterTextChanged(s: Editable?) {
val isValid = Patterns.EMAIL_ADDRESS.matcher(s).matches()
editText.error = if (isValid) null else "Invalid email format"
}
})
// Form gönderimi için OnEditorActionListener
editText.setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_DONE) {
submitForm()
true
} else false
}
E-posta ve parola girişi için EditText kullanarak bir giriş ekranı oluşturmanın tam bir örneğini inceleyelim. Bu örnek, inputType yapılandırmasını, TextWatcher aracılığıyla doğrulamayı ve giriş düğmesine basma işlemini gösterir.
@+id/etLoginEmail
android:layout_width="match_parent"
android:hint="Email"
android:inputType="textEmailAddress"
android:maxLines="1" />
@+id/etLoginPassword
android:layout_width="match_parent"
android:hint="Password"
android:inputType="textPassword"
android:maxLines="1" />
class LoginFragment : Fragment() {
private lateinit var etEmail: EditText
private lateinit var etPassword: EditText
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
etEmail = view.findViewById(R.id.etLoginEmail)
etPassword = view.findViewById(R.id.etLoginPassword)
etEmail.addTextChangedListener(emailWatcher)
etPassword.setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_DONE) {
performLogin()
true
} else false
}
}
}
EditText, XML nitelikleri, temalar ve stiller aracılığıyla özelleştirmeyi destekler. Metin rengi, ipucu rengi, alt çizgi rengi (backgroundTint), yazı tipi stili, metin boyutu ve çok daha fazlası değiştirilebilir. Material Components, boxStrokeColor, boxBackgroundColor ve endIconMode dahil özel niteliklere sahip MaterialComponents.EditText temasını sağlar.
EditText'in alt çizgi rengini değiştirmek için, varsayılan ve odak durumları için rengi ayarlayan android:backgroundTint niteliğini kullanın. Material Design'da alt çizgi rengi, temanın colorPrimary'si aracılığıyla yönetilir. Tam özelleştirme için res/drawable klasöründe arka plan için özel bir drawable oluşturabilirsiniz.
| Stil | Nitelik | Sonuç |
|---|---|---|
| Metin rengi | android:textColor | Girilen metnin rengini değiştirir |
| İpucu rengi | android:textColorHint | İpucu metninin rengini değiştirir |
| Alt çizgi | android:backgroundTint | Alanın altındaki çizginin rengini değiştirir |
| Yazı boyutu | android:textSize | Metin boyutunu sp cinsinden ayarlar |
| Yazı tipi | android:fontFamily | Özel yazı tipi uygular |
Uygulamanızdaki tüm EditText alanları için tutarlı bir stil oluşturmak için, temada küresel bir stil tanımlamanız önerilir. Material Design, TextInputLayout kullanan tüm giriş alanlarına otomatik olarak uygulanan Widget.MaterialComponents.TextInputLayout.OutlinedBox stilini sunar. Bu, her düzende nitelikleri tekrarlamadan tutarlı bir görünüm sağlar.
Sıkça Sorulan Sorular
EditText, TextView'den miras alır ve metin düzenleme yetenekleri ekler. TextView yalnızca metni görüntülerken, EditText kullanıcının içerik girmesine, silmesine ve değiştirmesine olanak tanır. EditText ayrıca inputType, TextWatcher, imleç yönetimi ve veri girişiyle ilgili diğer işlevleri de destekler.
InputFilter kullanın — giriş karakterlerini filtrelemek için bir arayüz. EditText, setFilters() yöntemi aracılığıyla bir filtre dizisi ayarlamayı destekler. Örneğin, InputFilter.LengthFilter metin uzunluğunu sınırlarken, özel bir InputFilter belirli karakterleri, normal ifadeleri veya Unicode aralıklarını kısıtlayabilir.
Kotlin'de editText.text.toString() veya Java'da editText.getText().toString() çağrısını yapın. text özelliği Editable döndürür ve toString() ile String'e dönüştürülür. Metni kullanmadan önce, özellikle zorunlu alanları olan formlarda, her zaman null ve boş değerleri kontrol edin.
android:inputType="textMultiLine" niteliğini ayarlayın veya programlı olarak InputType.TYPE_TEXT_FLAG_MULTI_LINE bayrağını ekleyin. Çok satırlı modda EditText, Enter ile satır sonlarına izin verir ve yükseklikte otomatik olarak genişler. Yüksekliği sınırlamak için android:maxLines veya android:minLines kullanın.
android:enabled="false" niteliğini ayarlayın veya kodda editText.isEnabled = false çağrısını yapın. Devre dışı bırakılmış EditText dokunmaya yanıt vermez, odak alamaz ve gri renkte görüntülenir (devre dışı durum). Bir alternatif, girişi devre dışı bırakan ancak normal görünümü koruyan android:focusable="false" kullanmaktı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