Density-independent pixel

Density-independent pixel (DP[1] eller dip[2]) er et alternativ til piksel i Android-utvikling. DP er lagd for å være vises i samme størrelse på alle enheter og skjermstørrelser. En DP er en piksel på en 160 dpi-skjerm. DP er ofte brukt i XML-filene for layouts, og er den enheten det er anbefalt å bruke i Android-utvikling.[3]

Sammenligning av enhetene i Android Studio.

Definisjon rediger

En DP er en abstrakt enhet som er basert på den fysiske tettheten til skjermen. Enheten er relativ til en 160 dpi-skjerm, så en DP er en piksel på en 160 dpi-skjerm. DP er en fast størrelse, og antall piksler i en DP tilpasser seg til oppløsningen på skjermen. Hvor mange pixels per inch (PPI) varierer mellom forskjellige skjermoppløsninger, men antall piksler i en DP øker med PPI. Forskjellen mellom piksler og DP, er at antall piksler må forandres med skjermoppløsningen. På grunn av hvordan DP fungerer, vil 10 DP se ut som samme størrelse på forskjellige skjermoppløsninger, mens 10 piksler vil se mindre ut når skjermoppløsningen øker.

Beregne DP/PX[4] rediger

DP er anbefalt å bruke over piksler,[3] men imidlertid er det ikke alt som har støtte for bruk av DP, som Canvas. Da kan det være lurt å bruke konvertering for å få antall piksler inn i «draw»-metodene, men allikevel bruke DP.

Kalkulere piksler til DP rediger

Hvis man har et visst antall piksler man vil konvertere til DP kan man gjøre det slik:

public static float convertPixelsToDp(float px, Context context){
    Resources resources = context.getResources();
    DisplayMetrics metrics = resources.getDisplayMetrics();
    float dp = px / ((float)metrics.densityDpi / DisplayMetrics.DENSITY_DEFAULT);
    return dp;
}

Beregningen går ut på å dele antall piksler på verdien man får av å dele skjermens DPI på standardenheten for DP, som er 160. Hvis skjermens DPI er 160, vil man dele antall piksler på 1, men hvis DPI er på 320 vil man dele antall piksler på 2.

Kalkulere DP til piksler rediger

Motsatt, hvis man vil konvertere DP til piksler kan man beregne det slik:

public static float convertDpToPixel(float dp, Context context){
    Resources resources = context.getResources();
    DisplayMetrics metrics = resources.getDisplayMetrics();
    float px = dp * ((float)metrics.densityDpi / DisplayMetrics.DENSITY_DEFAULT);
    return px;
}

Beregningen her går ut på å gange antall DP på skjermens DPI delt på DPI-standardenheten som er 160. Hvis skjermens DPI er 160, vil man gange antall dp på 1, men hvis DPI er på 320 vil man gange antall dp på 2.

Referanser rediger

  1. ^ «Supporting Multiple Screens | Android Developers». developer.android.com. Besøkt 3. januar 2017. 
  2. ^ «What is the difference between "px", "dp", "dip" and "sp" on Android?». stackoverflow.com. Besøkt 4. mars 2017. 
  3. ^ a b «Supporting Different Densities | Android Developers». developer.android.com. Besøkt 7. januar 2017. 
  4. ^ «Converting pixels to dp». stackoverflow.com. Besøkt 7. januar 2017.