Ipinapaliwanag ang mga batayan ng dp (density-independent pixel) — yunit ng pagsukat sa Android na tinitiyak ang parehong pisikal na laki ng mga elemento ng UI sa mga screen na may iba't ibang densidad ng pixel. Ang isang dp ay palaging katumbas ng 1/160 pulgada sa screen, hindi alintana kung ang device ay may mataas o mababang resolusyon. Ayon sa Google Material Design (2025), lahat ng sukat sa mga Android application ay dapat tukuyin sa dp, hindi sa px, kung hindi, ang interface ay magmumukhang iba sa iba't ibang device.
Mahahalagang Punto
dp (density-independent pixel) — ay isang virtual na yunit ng pagsukat sa Android, na ipinakilala para sa pag-iisa ng mga sukat ng elemento ng UI sa mga device na may iba't ibang densidad ng pixel. Ang isang dp ay halos katumbas ng isang pisikal na pixel sa isang screen na may densidad na 160 dpi (mdpi). Sa isang screen na may densidad na 320 dpi (xhdpi), ang 1 dp ay katumbas ng 2 pisikal na pixel. Kaya, ang pisikal na laki ng elemento sa screen ay nananatiling pareho — mga 1/160 pulgada. Ayon sa Android Developers (2025), ang dp ay ang tanging yunit ng pagsukat na dapat gamitin para sa mga sukat ng layout, padding, margin, at lapad/taas ng view.
Kung itinakda mo ang lapad ng isang button sa 160 px, sa mdpi screen ito ay magiging 1 pulgada ang lapad, at sa xxxhdpi screen (640 dpi) — 0.25 pulgada lamang. dp ay lumulutas sa problemang ito: ang 160 dp sa anumang screen ay katumbas ng 1 pulgada. Awtomatikong kino-convert ng Android ang dp sa px sa pamamagitan ng DisplayMetrics.density sa pag-render. Ayon sa Android Developer Blog (2025), bago ang pagpapakilala ng dp (Android 1.0), ang mga developer ay gumagamit ng px na manu-manong nagkakalkula, na humantong sa mga patuloy na bug sa pag-port.
dp, px at sp — tatlong yunit ng pagsukat sa Android, bawat isa ay may kanya-kanyang layunin. px — ang pisikal na pixel ng screen, na nakadepende sa densidad. dp — pixel na independyente sa densidad para sa mga sukat ng elemento. sp — scale-independent pixel para sa teksto, na karagdagang isinasaalang-alang ang mga setting ng system ng laki ng font. Ayon sa Material Design (2025), ang pagkakaiba sa pagitan ng dp at sp ay isang pangunahing aspeto ng accessibility: ang mga user na may mahinang paningin ay nagpapalaki ng font, at ang mga halaga ng sp ay awtomatikong nag-a-adjust, habang ang dp — ay hindi.
| Yunit | Buong Pangalan | Isinasaalang-alang ang Densidad | Isinasaalang-alang ang Setting ng Font | Paggamit |
|---|---|---|---|---|
| px | Pixel | Hindi | Hindi | Hindi inirerekomenda |
| dp | Density-independent Pixel | Oo | Hindi | Layout, padding, margin |
| sp | Scale-independent Pixel | Oo | Oo | Laki ng teksto |
Formula ng conversion dp sa px: px = dp × (dpi / 160). Para sa baligtad na conversion: dp = px / (dpi / 160). density — ay ang ratio na dpi / 160, na kinakalkula ng Android batay sa DisplayMetrics. Sa mdpi density = 1.0, sa hdpi = 1.5, sa xhdpi = 2.0, sa xxhdpi = 3.0, sa xxxhdpi = 4.0. Kaya, 48 dp sa pixels: sa mdpi — 48 px, sa xxhdpi — 144 px. Ayon sa Google I/O 2024, ang formula na ito ay maaaring gamitin para sa tinatayang conversion ng iOS pt (points) sa dp — 1 pt ≈ 1 dp.
| Bucket | Density | Halaga ng dpi | 48 dp sa px | 16 dp sa 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 — Android resource file sa res/values/, na idinisenyo para sa pag-iimbak ng lahat ng sukat sa dp (at sp para sa teksto). Ang sentralisasyon ng mga sukat sa dimens.xml ay nagpapadali sa pagpapanatili: ang pagbabago ng isang halaga sa dimens.xml ay nag-a-update ng sukat sa lahat ng screen ng application. Maaaring lumikha ng mga kwalipikadong dimens.xml file para sa iba't ibang densidad (values-hdpi, values-xhdpi). Ayon sa Android Jetpack Docs (2025), inirerekomenda ng Google na mag-imbak sa dimens.xml ng mga puwang (margin, padding), lapad ng elemento (constants), laki ng avatar, at taas ng 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>
Sa file na ito bawat dimen ay may pangalan at halaga. Paggamit sa XML file: @dimen/avatar_size. Ayon sa Material Design Guidelines (2025), ang pangunahing hakbang ng grid sa Android ay 8 dp (8-point grid). Lahat ng puwang, sukat ng elemento, at distansya ay dapat na multiple ng 8 dp: 8, 16, 24, 32, 48, 56, 64, 72 dp. Para sa teksto, ang hakbang ay 4 sp.
Sa XML file, ang dp ay direktang ginagamit: android:layout_width="48dp". Sa program code (Kotlin/Java) kailangan i-convert ang dp sa px gamit ang TypedResource o extension function. TypedResource ay nagbibigay ng mga handa na pamamaraan para sa pagtatrabaho sa dp sa runtime: getDimensionPixelSize() ay nagbabalik ng integer px. Sa Jetpack Compose, ang dp ay ang karaniwang yunit ng pagsukat sa mga modifier at layout container.
// Programatikong conversion ng dp sa px
fun Context.dpToPx(dp: Int): Int {
return (dp * resources
.displayMetrics
.density).toInt()
}
// Paggamit sa Activity
val paddingPx = dpToPx(16)
button.setPadding(
paddingPx,
paddingPx,
paddingPx,
paddingPx,
)
// Jetpack Compose: dp bilang built-in na unit
Modifier
.padding(16.dp)
.size(48.dp)
Sa halimbawang ito dpToPx() — extension function para sa Context, na nagko-convert ng dp sa px gamit ang displayMetrics.density. Sa Jetpack Compose, ang dp ay naka-embed sa sistema ng uri at hindi nangangailangan ng manu-manong conversion — ang compiler ay awtomatikong nagsasalin ng dp sa px sa yugto ng pag-render.
<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"
/>
Sa XML, ang dp ay idinaragdag bilang suffix sa numero — margin_top="16dp". Para sa teksto, ginagamit ang sp — textSize="@dimen/text_size_body". Ang referensyang @dimen ay nagpapahintulot ng sentralisadong pamamahala ng mga halaga. Ang paggamit ng match_parent para sa lapad at 48dp para sa taas ay karaniwang pattern ng Material Design para sa mga button.
Ayon sa pagsusuri ng mga Android application mula sa Google Play Console (2025), limang pinakakaraniwang pagkakamali: paggamit ng px sa halip na dp sa XML file, kawalan ng dimens.xml (mga halaga na inline na nakasulat), maling conversion ng dp sa px sa code (paggamit ng integer division), pagbalewala sa sp para sa teksto, at hindi pagsasaalang-alang sa mga setting ng system ng laki ng font sa pamamagitan ng sp. Integer division ang pinakamapanganib na pagkakamali: sa Kotlin val px = dp * density — kung ang dp at density ay Int, ang resulta ay magiging Int din, at nawawala ang precision.
Mga Madalas Itanong
dp sa Android at pt (points) sa iOS — ay katumbas na yunit ng pagsukat. Ang 1 dp sa Android ay halos katumbas ng 1 pt sa iOS. Ang parehong konsepto ay naglalarawan ng mga puntos na independyente sa densidad: sa mga lumang device na may mababang densidad 1 dp/pt = 1 px, sa mga moderno — 2-4 px. Ang pagkakaiba sa base value: Android ay gumagamit ng 160 dpi bilang base density, iOS — 163 dpi, na nagbibigay ng error na mas mababa sa 2%.
Sa Jetpack Compose hindi kinakailangan ang conversion — dp ay naka-embed sa sistema ng uri. Lahat ng modifier at layout ay tumatanggap ng Dp, hindi px. Kung kailangan kumuha ng px mula sa dp, gamitin ang density: val px = with(LocalDensity.current) { 16.dp.toPx() }. Ang LocalDensity ay nagbibigay ng conversion factor na isinasaalang-alang ang densidad ng screen ng device.
dp — terminong Android. Sa iOS, ang katumbas ay pt (points). Awtomatikong gumagana ang Swift sa mga puntos na hindi nakadepende sa densidad ng screen. Sa UIKit at SwiftUI, lahat ng sukat ay tinutukoy sa puntos, at ang sistema ay nagko-convert sa kanila sa px gamit ang scale factor ng screen (UIScreen.main.scale). Ang prinsipyo ay pareho, ang pangalan ay naiiba.
Buod
Gagawa kami ng mobile application na turnkey
Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.
Basahin din