141 votes

Comment calculer dp à partir de pixels dans Android par programmation

Je veux calculer dp de px programme. Comment faire? Je reçois la résolution de:

 DisplayMetrics displaymetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
ht = displaymetrics.heightPixels;
wt = displaymetrics.widthPixels;
 

386voto

Vicky Chijwani Points 1300

Ici toutes les réponses montrent une dp->px de conversion plutôt que px->dp, qui est ce que l'OP a demandé. Notez que TypedValue.applyDimension ne peut pas être utilisé pour convertir px->dp, pour cela vous devez utiliser la méthode décrite ici: http://stackoverflow.com/a/17880012/504611 (cité ci-dessous pour plus de commodité).

Sans Contexte, élégant méthodes statiques:

public static int dpToPx(int dp)
{
    return (int) (dp * Resources.getSystem().getDisplayMetrics().density);
}

public static int pxToDp(int px)
{
    return (int) (px / Resources.getSystem().getDisplayMetrics().density);
}

55voto

Style Points 2401
float ht_px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, ht, getResources().getDisplayMetrics());
float wt_px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, wt, getResources().getDisplayMetrics());

39voto

kaspermoerch Points 7580

Cela devrait vous donner les pixels de conversion -> dp:

 DisplayMetrics displaymetrics = new DisplayMetrics();
int dp = (int) TypedValue.applyDimension( TypedValue.COMPLEX_UNIT_DIP, myPixels, displaymetrics );
 

2voto

 DisplayMetrics dm = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(dm);
        String str_ScreenSize = "The Android Screen is: "
                    + dm.widthPixels
                    + " x "
                    + dm.heightPixels;

        TextView mScreenSize = (TextView) findViewById(R.id.strScreenSize);
        mScreenSize.setText(str_ScreenSize);
 

pouvez-vous vous en priver ..

ou cela peut aussi vous aider

 int value = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 
                     (float) 123.4, getResources().getDisplayMetrics());
 

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