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) — 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.
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 — 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.
| Satuan | Nama Lengkap | Mempertimbangkan Kerapatan | Mempertimbangkan Pengaturan Font | Penggunaan |
|---|---|---|---|---|
| px | Pixel | Tidak | Tidak | Tidak direkomendasikan |
| dp | Density-independent Pixel | Ya | Tidak | Layout, padding, margin |
| sp | Scale-independent Pixel | Ya | Ya | Ukuran teks |
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.
| Bucket | Density | Nilai dpi | 48 dp dalam px | 16 dp dalam px |
|---|---|---|---|---|
| mdpi | 1.0 | 160 | 48 | 16 |
| hdpi | 1.5 | 240 | 72 | 24 |
| xhdpi | 2.0 | 320 | 96 | 32 |
| xxhdpi | 3.0 | 480 | 144 | 48 |
| xxxhdpi | 4.0 | 640 | 192 | 64 |
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.
<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.
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.
// 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.
<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.
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.
Pertanyaan yang Sering Diajukan
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%.
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.
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
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.
Baca juga