913 votes

Conversion de pixels en dp

J'ai créé mon application avec la hauteur et la largeur données en pixels pour un appareil Pantech dont la résolution est 480x800.

J'ai besoin de convertir la hauteur et la largeur pour un appareil G1. Je pensais que la conversion en dp résoudrait le problème et fournirait la même solution pour les deux appareils.

Y at-il un moyen facile de convertir les pixels en dp? Aucune suggestion?

1125voto

prasobh Points 3479
/// Converts 14 dip into its equivalent px

Resources r = getResources();
float px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 14, r.getDisplayMetrics());

921voto

/**
 * This method converts dp unit to equivalent pixels, depending on device density. 
 * 
 * @param dp A value in dp (density independent pixels) unit. Which we need to convert into pixels
 * @param context Context to get resources and device specific display metrics
 * @return A float value to represent px equivalent to dp depending on device density
 */
public static float convertDpToPixel(float dp, Context context){
    Resources resources = context.getResources();
    DisplayMetrics metrics = resources.getDisplayMetrics();
    float px = dp * (metrics.densityDpi / 160f);
    return px;
}

/**
 * This method converts device specific pixels to density independent pixels.
 * 
 * @param px A value in px (pixels) unit. Which we need to convert into db
 * @param context Context to get resources and device specific display metrics
 * @return A float value to represent dp equivalent to px value
 */
public static float convertPixelsToDp(float px, Context context){
    Resources resources = context.getResources();
    DisplayMetrics metrics = resources.getDisplayMetrics();
    float dp = px / (metrics.densityDpi / 160f);
    return dp;
}

303voto

Mike Keskinov Points 2890
private float dpFromPx(float px)
{
    return px / this.getContext().getResources().getDisplayMetrics().density;
}

private float pxFromDp(float dp)
{
    return dp * this.getContext().getResources().getDisplayMetrics().density;
}

212voto

Zsolt Safrany Points 1688
float density = context.getResources().getDisplayMetrics().density;
float px = someDpValue * density;
float dp = somePxValue / density;

density est égal à

  • .75 sur ldpi (120 ppp)
  • 1.0 sur mdpi (160 ppp; base)
  • 1.5 sur hdpi (240 ppp)
  • 2.0 sur xhdpi (320 ppp)
  • 3.0 sur xxhdpi (480 ppp)
  • 4.0 sur xxxhdpi (640 ppp)

75voto

Selon le Guide de développement Android:

 px = dp * (dpi / 160)
 

Mais souvent, vous aurez envie de faire cela dans l'autre sens lorsque vous recevez un design qui est indiqué en pixels. Alors:

 dp = px / (dpi / 160)
 

Si vous êtes sur un appareil à 240dpi, ce rapport est de 1,5 (comme indiqué précédemment), ce qui signifie qu'une icône de 60px équivaut à 40dp dans l'application.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X