Android'de Padding ve Margin Nasıl Çalışır — Kısa ve Öz
Kısaca: padding, View içindeki iç boşluktur (içerik ile kenarlar arasında) ve arka plan/tıklama alanını etkiler; margin ise View ile komşu öğeler arasındaki dış boşluktur ve View'ın iç alanını değiştirmez. Devamında bunun pratikte nasıl uygulanacağı ve yaygın hatalar ele alınmaktadır.
Padding nedir ve nasıl davranır
Padding, View'ın kenarlarından içeriğine (metin, simge, alt View'lar) olan mesafeyi belirler. İçeriği içeri doğru kaydırır ve View'ın sınırlarının bir parçası olarak kalır; arka plan ve tıklama alanı padding'i de kapsar.
XML örneği:
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp"
android:text="Örnek metin" />
Genişlik sabitlenmişse (örneğin 200dp), padding içerik için kullanılabilir alanı azaltır: 200dp − (paddingLeft + paddingRight).
Ne zaman kullanılır:
- Okunabilirlik için butonların, kartların ve TextView'ların iç boşluklarında.
- Arka planın içerikle birlikte "nefes almasını" istiyorsanız, View boyutlarını değiştirmek yerine padding ekleyin.
Standart boyutlar: küçük öğeler için 8–16dp, kartlar/başlıklar için 16–24dp. Uyumluluk için değerleri dimens.xml dosyasına taşıyın.
Margin nedir ve davranış özellikleri
Margin, View'ın etrafındaki dış boşluğu belirler; bu View ile diğer öğeler veya kapsayıcının kenarları arasındaki mesafedir. Margin, View'ın iç boyutunu değiştirmez ve View'ın kendi arka plan/tıklama alanına dahil değildir.
Örnek:
<TextView
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:text="Örnek" />
View genişlik olarak 200dp kaplayacak ve komşu öğeler 8dp uzakta olacaktır. Margin davranışı kısmen kapsayıcıya bağlıdır: ConstraintLayout'ta margin bağlara (constraints) uygulanır, LinearLayout'ta bitişik boşluklar öğeler arasında sadece alan ekler (gizli etkileri yoktur).
Önemli: Gölge (elevation), View'ın kendi sınırlarına göre çizilir. Margin sınırların dışındadır, gölge dış alana yayılmaz.
Padding ve margin'i karıştırmayın: padding, View içindeki içeriğin konumunu ve tıklama/arka plan alanını etkiler; margin yalnızca View'ı komşularına göre kaydırır.
Pratik örnekler ve öneriler
- Butonlar ve kartlar
- Metnin kenarlara yapışmaması için buton içinde padding kullanın.
- Liste öğeleri arasındaki mesafe için karta margin ekleyin.
- Izgara/RecyclerView
- Liste öğeleri için: öğe içinde padding (içerik iç boşlukları) + öğeler arası mesafe için dış margin veya ItemDecoration.
- Düzgün bir ızgara için spacing'i yalnızca margin'e güvenmek yerine ItemDecoration üzerinden yönetmek tercih edilir.
- Kombinasyon: parent padding vs child margin
- İçeriği ekran kenarlarından uzaklaştırmak gerekiyorsa, her alt View'a margin vermek yerine kapsayıcıya (örneğin root'a) padding ekleyin; bu şekilde tutarlılığı korumak daha kolaydır.
Örnek (LinearLayout):
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="12dp"
android:background="#E0E0E0"
android:text="Üst: iç padding" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:padding="12dp"
android:background="#F0F0F0"
android:text="Alt: üstten margin" />
</LinearLayout>
Arka plan alanları arasındaki mesafe layout_margin sayesinde oluşur, her öğenin içindeki metin padding kadar içeriden uzaklaşır.
Jetpack Compose: Benzer şekilde — Modifier.padding(16.dp) iç boşluk sağlar, dış spacing için Spacer veya bileşenin kendisindeki Modifier.padding'i ebeveyn/layout içinde kullanın.
Sık yapılan hatalar
- Buton/metin iç boşlukları için padding yerine margin kullanmak — arka planın kenarlarda kalmasına neden olur.
- Tüm öğelerde aynı boşlukları tekrarlamak yerine bunları dimens.xml veya ItemDecoration'a taşımamak.
- Elevation'ın margin'i etkilemesini beklemek — gölge View sınırlarına göre çizilir, margin bu sınırların dışındadır.
- Izgara spacing'ini yalnızca öğelerdeki margin ile merkezi bir yaklaşım olmadan yönetmeye çalışmak — ızgaranın kenarlarında hatalı boşluklar ortaya çıkar.
SSS
-
Öğelerin içinde her zaman padding kullanmalı mıyım?
Hayır — içeriğin sınırlardan uzaklaştırılması gereken yerlerde padding kullanın; dış spacing'i margin veya ItemDecoration ile çözün. -
RecyclerView öğelerini en iyi nasıl uzaklaştırırım?
ItemDecoration daha öngörülebilir spacing sağlar ve her öğenin layout_margin değerini değiştirmeyi gerektirmez. -
Padding tıklama olayını etkiler mi?
Tıklama alanı, View'ın sınırlarıdır (padding dahil). Görsel arka planı değiştirmeden tıklama alanını büyütmek istiyorsanız padding kullanın veya dokunma hedefini programatik olarak artırın. -
Boşluk değerlerini nerede saklamalıyım?
dimens.xml dosyasında: bu sayede tutarlılığı sağlamak ve farklı ekranlara uyum sağlamak daha kolay olur.
Farkı kavrayıp iç "hava" için padding'i, dış spacing için margin/ItemDecoration'ı uyguladığınızda, kullanıcı arayüzünü hızla düzenli ve öngörülebilir hale getirebilirsiniz.