J'ai besoin de coder la disposition des widgets Android à l'aide de dip/dp (dans des fichiers Java). Au moment de l'exécution si je code,int pixel=this.getWindowManager().getDefaultDisplay().getWidth()
;
cela retourne la largeur de l'écran en pixels (px). Pour convertir ceci en dp, j'ai codé:int dp =pixel/(int)getResources().getDisplayMetrics().density ;
Cela ne semble pas donner de réponse correcte. J'ai créé l'émulateur de WVGA800 dont la résolution d'écran est de 480 sur 800. Lorsque vous exécutez l'émulateur et laissez le code afficher les valeurs de pixel et dp, il atteint 320 dans les deux cas. Cet émulateur est de 240 dpi dont le facteur d'échelle serait de 0,75.
Essaye ça
Display display = getWindowManager().getDefaultDisplay();
DisplayMetrics outMetrics = new DisplayMetrics ();
display.getMetrics(outMetrics);
float density = getResources().getDisplayMetrics().density;
float dpHeight = outMetrics.heightPixels / density;
float dpWidth = outMetrics.widthPixels / density;
OU
Merci @ Tomáš Hubálek
DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
float dpHeight = displayMetrics.heightPixels / displayMetrics.density;
float dpWidth = displayMetrics.widthPixels / displayMetrics.density;
Je suis tombé par hasard sur cette question de Google et, plus tard, j'ai trouvé une solution simple, valable pour les API> = 13.
Pour les références futures:
Configuration configuration = yourActivity.getResources().getConfiguration();
int screenWidthDp = configuration.screenWidthDp; //The current width of the available screen space, in dp units, corresponding to screen width resource qualifier.
int smallestScreenWidthDp = configuration.smallestScreenWidthDp; //The smallest screen size an application will see in normal operation, corresponding to smallest screen width resource qualifier.
Voir Référence de la classe de configuration
Edit: Comme l’a noté Nick Baicoianu, ceci retourne la largeur/hauteur utilisable de l’écran (utilisable) (qui devrait être intéressant dans la plupart des utilisations). Si vous avez besoin des dimensions de l'affichage actual, restez fidèle à la première réponse.
Il vous manque la valeur de densité par défaut de 160.
2 px = 3 dip if dpi == 80(ldpi), 320x240 screen
1 px = 1 dip if dpi == 160(mdpi), 480x320 screen
3 px = 2 dip if dpi == 240(hdpi), 840x480 screen
En d'autres termes, si vous concevez votre mise en page avec une largeur égale à 160dip en mode portrait, ce sera la moitié de l'écran sur tous les périphériques ldpi/mdpi/hdpi (sauf les tablettes, je pense)
DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
int width_px = Resources.getSystem().getDisplayMetrics().widthPixels;
int height_px =Resources.getSystem().getDisplayMetrics().heightPixels;
int pixeldpi = Resources.getSystem().getDisplayMetrics().densityDpi;
int width_dp = (width_px/pixeldpi)*160;
int height_dp = (height_px/pixeldpi)*160;
Que diriez-vous d'utiliser ceci à la place?
final DisplayMetrics displayMetrics=getResources().getDisplayMetrics();
final float screenWidthInDp=displayMetrics.widthPixels/displayMetrics.density;
final float screenHeightInDp=displayMetrics.heightPixels/displayMetrics.density;
Réponse en kotlin:
context?.let {
val displayMetrics = it.resources.displayMetrics
val dpHeight = displayMetrics.heightPixels / displayMetrics.density
val dpWidth = displayMetrics.widthPixels / displayMetrics.density
}
Si vous souhaitez simplement connaître la largeur de votre écran, vous pouvez simplement rechercher la "plus petite largeur d'écran" dans vos options de développement. Vous pouvez même le modifier.
Obtenez la largeur et la hauteur de l'écran en termes de DP avec une bonne décoration:
Étape 1: Créer une interface
public interface ScreenInterface {
float getWidth();
float getHeight();
}
Étape 2: Créer une classe d'implémentation
public class Screen implements ScreenInterface {
private Activity activity;
public Screen(Activity activity) {
this.activity = activity;
}
private DisplayMetrics getScreenDimension(Activity activity) {
DisplayMetrics displayMetrics = new DisplayMetrics();
activity.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
return displayMetrics;
}
private float getScreenDensity(Activity activity) {
return activity.getResources().getDisplayMetrics().density;
}
@Override
public float getWidth() {
DisplayMetrics displayMetrics = getScreenDimension(activity);
return displayMetrics.widthPixels / getScreenDensity(activity);
}
@Override
public float getHeight() {
DisplayMetrics displayMetrics = getScreenDimension(activity);
return displayMetrics.heightPixels / getScreenDensity(activity);
}
}
Étape 3: Obtenez la largeur et la hauteur en activité:
Screen screen = new Screen(this); // Setting Screen
screen.getWidth();
screen.getHeight();