dp — mga batayan, mga pixel na independyente sa densidad sa Android

May-akda: IT Sectr Nai-publish: 2026-02-25 Oras ng pagbabasa: 7 min

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) — abstract na yunit ng pagsukat sa Android, katumbas ng 1/160 pulgada sa screen.
  • Formula ng conversion: px = dp × (dpi / 160). Sa mdpi screen 1 dp = 1 px, sa xxhdpi 1 dp = 3 px.
  • Lahat ng sukat sa XML (layout_width, padding, margin) ay tinutukoy sa dp.
  • dimens.xml — Android resource file para sa sentralisadong pag-iimbak ng mga halaga ng dp.
  • Ayon sa Google Android Performance Guide (2025), ang paggamit ng dp sa halip na px ay nag-aalis ng 90% ng mga problema sa pag-aangkop ng interface sa iba't ibang screen.

Ano ang dp sa Android?

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.

Bakit hindi maaaring gamitin ang px

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: ano ang pagkakaiba

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.

YunitBuong PangalanIsinasaalang-alang ang DensidadIsinasaalang-alang ang Setting ng FontPaggamit
pxPixelHindiHindiHindi inirerekomenda
dpDensity-independent PixelOoHindiLayout, padding, margin
spScale-independent PixelOoOoLaki ng teksto

Formula ng conversion ng dp sa px at pabalik

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.

BucketDensityHalaga ng dpi48 dp sa px16 dp sa px
mdpi1.01604816
hdpi1.52407224
xhdpi2.03209632
xxhdpi3.048014448
xxxhdpi4.064019264

dimens.xml: sentralisadong pamamahala ng sukat

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.

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>

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.

Programatikong paggamit ng dp sa Kotlin at XML

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.

Kotlin
// 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.

XML file na may 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"
/>

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.

Mga karaniwang pagkakamali sa paggamit ng dp

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.

  • px sa halip na dp — ang application ay mukhang iba sa mga device na may iba't ibang densidad. Pag-aayos: palitan ang px ng dp sa XML.
  • Mga inline na halaga — ang mga sukat ay direktang nakasulat sa mga layout file. Ang pagdodoble ng mga halaga ay nagpapahirap sa pagpapanatili at pag-update.
  • sp para sa teksto — ang paggamit ng dp para sa laki ng font ay binabalewala ang mga setting ng user, lumalabag sa accessibility.
  • Integer division — sa Kotlin ang paghahati ng Int sa Int ay nagbibigay ng Int, nawawala ang fractional na bahagi. Palaging gumamit ng Float.

Mga Madalas Itanong

Paano naiiba ang dp sa pt sa iOS?

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%.

Paano i-convert ang dp sa px sa Jetpack Compose?

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.

Kailangan bang gumamit ng dp sa iOS?

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

  • dp — Density-independent Pixel, abstract na yunit para sa mga sukat ng UI sa Android, katumbas ng 1/160 pulgada.
  • Formula: px = dp × (dpi / 160). Sa mdpi 1 dp = 1 px, sa xxhdpi 1 dp = 3 px.
  • Lahat ng sukat sa XML file ay dapat tukuyin sa dp, laki ng teksto — sa sp.
  • dimens.xml — sentralisadong imbakan ng sukat. Isang pagbabago ay nag-a-update sa buong interface.
  • 8-point grid: lahat ng sukat ay multiple ng 8 dp, mga puwang ng teksto — 4 sp.
  • Sa program code gamitin ang TypedResource o extension function para sa conversion ng dp sa px.

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.

Pag-usapan ang proyekto

Basahin din