dp — dasar, piksel independen kepadatan di Android

Penulis: IT Sectr Diterbitkan: 2026-02-25 Waktu membaca: 7 mnt

Menjelaskan dasar dp (density-independent pixel) — satuan pengukuran di Android yang memastikan ukuran fisik elemen UI yang sama pada layar dengan kerapatan piksel berbeda. Satu dp selalu setara dengan 1/160 inci di layar, terlepas dari apakah perangkat memiliki resolusi tinggi atau rendah. Menurut Google Material Design (2025), semua ukuran dalam aplikasi Android harus ditentukan dalam dp, bukan px, jika tidak antarmuka akan terlihat berbeda di perangkat yang berbeda.

Utama

  • dp (density-independent pixel) — satuan pengukuran abstrak di Android, setara dengan 1/160 inci di layar.
  • Rumus konversi: px = dp × (dpi / 160). Di layar mdpi 1 dp = 1 px, di xxhdpi 1 dp = 3 px.
  • Semua ukuran dalam XML (layout_width, padding, margin) ditentukan dalam dp.
  • dimens.xml — file sumber daya Android untuk penyimpanan terpusat nilai dp.
  • Menurut Google Android Performance Guide (2025), penggunaan dp sebagai pengganti px menghilangkan 90% masalah adaptasi antarmuka di layar yang berbeda.

Apa itu dp di Android?

dp (density-independent pixel) — adalah satuan pengukuran virtual di Android, diperkenalkan untuk menyatukan ukuran elemen UI pada perangkat dengan kerapatan piksel berbeda. Satu dp kira-kira sama dengan satu piksel fisik di layar dengan kerapatan 160 dpi (mdpi). Di layar dengan kerapatan 320 dpi (xhdpi), 1 dp akan sama dengan 2 piksel fisik. Dengan demikian, ukuran fisik elemen di layar tetap sama — sekitar 1/160 inci. Menurut Android Developers (2025), dp adalah satu-satunya satuan pengukuran yang harus digunakan untuk ukuran layout, padding, margin, dan lebar/tinggi view.

Mengapa px tidak bisa digunakan

Jika Anda mengatur lebar tombol menjadi 160 px, di layar mdpi lebarnya akan 1 inci, dan di layar xxxhdpi (640 dpi) — hanya 0,25 inci. dp memecahkan masalah ini: 160 dp di layar mana pun akan sama dengan 1 inci. Android secara otomatis mengonversi dp ke px melalui DisplayMetrics.density saat rendering. Menurut Android Developer Blog (2025), sebelum diperkenalkannya dp (Android 1.0), pengembang menggunakan px dengan menghitung manual, yang menyebabkan bug konstan saat porting.

dp, px dan sp: apa bedanya

dp, px dan sp — tiga satuan pengukuran di Android, masing-masing dengan tujuannya sendiri. px — piksel fisik layar, yang tergantung pada kerapatan. dp — piksel independen kerapatan untuk ukuran elemen. sp — scale-independent pixel untuk teks, yang juga mempertimbangkan pengaturan sistem ukuran font. Menurut Material Design (2025), perbedaan antara dp dan sp adalah aspek aksesibilitas utama: pengguna dengan penglihatan buruk memperbesar font, dan nilai sp menyesuaikan secara otomatis, sedangkan dp — tidak.

SatuanNama LengkapMempertimbangkan KerapatanMempertimbangkan Pengaturan FontPenggunaan
pxPixelTidakTidakTidak direkomendasikan
dpDensity-independent PixelYaTidakLayout, padding, margin
spScale-independent PixelYaYaUkuran teks

Rumus konversi dp ke px dan sebaliknya

Rumus konversi dp ke px: px = dp × (dpi / 160). Untuk konversi sebaliknya: dp = px / (dpi / 160). density — adalah rasio dpi / 160, yang dihitung Android berdasarkan DisplayMetrics. Di mdpi density = 1.0, di hdpi = 1.5, di xhdpi = 2.0, di xxhdpi = 3.0, di xxxhdpi = 4.0. Jadi, 48 dp dalam piksel: di mdpi — 48 px, di xxhdpi — 144 px. Menurut Google I/O 2024, rumus ini dapat digunakan untuk konversi perkiraan iOS pt (points) ke dp — 1 pt ≈ 1 dp.

BucketDensityNilai dpi48 dp dalam px16 dp dalam px
mdpi1.01604816
hdpi1.52407224
xhdpi2.03209632
xxhdpi3.048014448
xxxhdpi4.064019264

dimens.xml: manajemen ukuran terpusat

dimens.xml — file sumber daya Android di res/values/, yang dirancang untuk menyimpan semua ukuran dalam dp (dan sp untuk teks). Sentralisasi ukuran dalam dimens.xml menyederhanakan perawatan: mengubah satu nilai di dimens.xml memperbarui ukuran di semua layar aplikasi. File dimens.xml yang memenuhi syarat dapat dibuat untuk kerapatan berbeda (values-hdpi, values-xhdpi). Menurut Android Jetpack Docs (2025), Google merekomendasikan menyimpan di dimens.xml spasi (margin, padding), lebar elemen (konstanta), ukuran avatar, dan tinggi toolbar.

XML


<resources>
    <dimen name="margin_small">8dp</dimen>
    <dimen name="margin_medium">16dp</dimen>
    <dimen name="margin_large">24dp</dimen>
    <dimen name="avatar_size">48dp</dimen>
    <dimen name="toolbar_height">56dp</dimen>
    <dimen name="text_size_body">14sp</dimen>
    <dimen name="icon_size_small">24dp</dimen>
</resources>

Dalam file ini setiap dimen memiliki nama dan nilai. Penggunaan di file XML: @dimen/avatar_size. Menurut Material Design Guidelines (2025), langkah dasar kisi di Android adalah 8 dp (8-point grid). Semua spasi, ukuran elemen, dan jarak harus kelipatan 8 dp: 8, 16, 24, 32, 48, 56, 64, 72 dp. Untuk teks, langkahnya adalah 4 sp.

Penggunaan dp secara programatis di Kotlin dan XML

Di file XML, dp digunakan langsung: android:layout_width="48dp". Dalam kode program (Kotlin/Java) perlu mengonversi dp ke px menggunakan TypedResource atau fungsi ekstensi. TypedResource menyediakan metode siap pakai untuk bekerja dengan dp saat runtime: getDimensionPixelSize() mengembalikan bilangan bulat px. Di Jetpack Compose, dp adalah satuan pengukuran standar dalam pengubah dan container layout.

Kotlin
// Konversi dp ke px secara programatis
fun Context.dpToPx(dp: Int): Int {
    return (dp * resources
        .displayMetrics
        .density).toInt()
}

// Penggunaan di Activity
val paddingPx = dpToPx(16)
button.setPadding(
    paddingPx,
    paddingPx,
    paddingPx,
    paddingPx,
)

// Jetpack Compose: dp sebagai unit bawaan
Modifier
    .padding(16.dp)
    .size(48.dp)

Dalam contoh ini dpToPx() — fungsi ekstensi untuk Context, yang mengonversi dp ke px menggunakan displayMetrics.density. Di Jetpack Compose, dp terintegrasi dalam sistem tipe dan tidak memerlukan konversi manual — kompilator secara otomatis menerjemahkan dp ke px pada tahap rendering.

File XML dengan dp

XML

<Button
    android:layout_width="match_parent"
    android:layout_height="48dp"
    android:padding="@dimen/margin_medium"
    android:textSize="@dimen/text_size_body"
    android:text="@string/button_label"
    android:layout_marginTop="16dp"
/>

Di XML, dp ditambahkan sebagai akhiran pada angka — margin_top="16dp". Untuk teks, digunakan sp — textSize="@dimen/text_size_body". Referensi @dimen memungkinkan manajemen nilai terpusat. Penggunaan match_parent untuk lebar dan 48dp untuk tinggi adalah pola standar Material Design untuk tombol.

Kesalahan umum saat menggunakan dp

Menurut analisis aplikasi Android dari Google Play Console (2025), lima kesalahan paling umum: penggunaan px sebagai pengganti dp di file XML, tidak adanya dimens.xml (nilai ditulis inline), konversi dp ke px yang salah dalam kode (penggunaan pembagian bilangan bulat), mengabaikan sp untuk teks, dan tidak memperhitungkan pengaturan sistem ukuran font melalui sp. Pembagian bilangan bulat adalah kesalahan paling berbahaya: di Kotlin val px = dp * density — jika dp dan density adalah Int, hasilnya juga akan Int, dan presisi hilang.

  • px sebagai pengganti dp — aplikasi terlihat berbeda di perangkat dengan kerapatan berbeda. Perbaikan: ganti px dengan dp di XML.
  • Nilai inline — ukuran ditulis langsung di file layout. Duplikasi nilai mempersulit perawatan dan pembaruan.
  • sp untuk teks — penggunaan dp untuk ukuran font mengabaikan pengaturan pengguna, melanggar aksesibilitas.
  • Pembagian bilangan bulat — di Kotlin pembagian Int dengan Int menghasilkan Int, kehilangan bagian pecahan. Selalu gunakan Float.

Pertanyaan yang Sering Diajukan

Apa perbedaan dp dengan pt di iOS?

dp di Android dan pt (points) di iOS — adalah satuan pengukuran yang setara. 1 dp di Android kira-kira sama dengan 1 pt di iOS. Kedua konsep menggambarkan titik independen kerapatan: di perangkat lama dengan kerapatan rendah 1 dp/pt = 1 px, di perangkat modern — 2-4 px. Perbedaan dalam nilai dasar: Android menggunakan 160 dpi sebagai kerapatan dasar, iOS — 163 dpi, yang memberikan kesalahan kurang dari 2%.

Bagaimana cara mengonversi dp ke px di Jetpack Compose?

Di Jetpack Compose konversi tidak diperlukan — dp terintegrasi dalam sistem tipe. Semua pengubah dan layout menerima Dp, bukan px. Jika perlu mendapatkan px dari dp, gunakan density: val px = with(LocalDensity.current) { 16.dp.toPx() }. LocalDensity menyediakan faktor konversi yang mempertimbangkan kerapatan layar perangkat.

Apakah perlu menggunakan dp di iOS?

dp — istilah Android. Di iOS, padanannya adalah pt (points). Swift secara otomatis bekerja dengan titik yang tidak tergantung pada kerapatan layar. Di UIKit dan SwiftUI, semua ukuran ditentukan dalam titik, dan sistem mengonversinya ke px menggunakan faktor skala layar (UIScreen.main.scale). Prinsipnya sama, namanya berbeda.

Kesimpulan

  • dp — Density-independent Pixel, satuan abstrak untuk ukuran UI di Android, setara dengan 1/160 inci.
  • Rumus: px = dp × (dpi / 160). Di mdpi 1 dp = 1 px, di xxhdpi 1 dp = 3 px.
  • Semua ukuran di file XML harus ditentukan dalam dp, ukuran teks — dalam sp.
  • dimens.xml — penyimpanan ukuran terpusat. Satu perubahan memperbarui seluruh antarmuka.
  • 8-point grid: semua ukuran adalah kelipatan 8 dp, spasi teks — 4 sp.
  • Dalam kode program gunakan TypedResource atau fungsi ekstensi untuk konversi dp ke px.

Kami akan mengembangkan aplikasi seluler turnkey

IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.

Diskusikan proyek

Baca juga