J'ai besoin de coder la disposition des widgets Android en utilisant dip / dp (dans les fichiers java). Au moment de l'exécution si je code
int pixel=this.getWindowManager().getDefaultDisplay().getWidth()
,;
cela renvoie la largeur de l'écran en pixels (px). Pour convertir cela en dp, j'ai codé:
int dp =pixel/(int)getResources().getDisplayMetrics().density ;
cela ne semble pas renvoyer la bonne réponse. J'ai fait l'émulateur de WVGA800 dont la résolution d'écran est de 480 par 800. Lorsque vous exécutez l'émulateur et laissez le code imprimer les valeurs de pixel et de dp, il est venu à 320 dans les deux. Cet émulateur est de 240 dpi dont le facteur d'échelle serait de 0,75.
android
density-independent-pixel
Khushboo
la source
la source
Je suis tombé sur cette question de Google, et plus tard j'ai trouvé une solution simple valable pour l'API> = 13.
Pour de futures références:
Voir Référence de classe de configuration
Edit: Comme l'a noté Nick Baicoianu, cela renvoie la largeur / hauteur utilisable de l'écran (qui devrait être intéressante dans la plupart des utilisations). Si vous avez besoin des dimensions d'affichage réelles , respectez la première réponse.
la source
Il vous manque une valeur de densité par défaut de 160.
En d'autres termes, si vous concevez votre mise en page avec une largeur égale à 160 dip en mode portrait, ce sera la moitié de l'écran sur tous les appareils ldpi / mdpi / hdpi (sauf les tablettes, je pense)
la source
DisplayMetrics outMetrics = null; getWindowManager().getDefaultDisplay().getMetrics(outMetrics);
dans l'activité. Ensuite,outMetrics.density
vous donnera le facteur d'échelle de l'appareil actuel, comme indiqué dans la documentationQue diriez-vous d'utiliser à la place?
la source
la source
Réponse en kotlin:
la source
Simplifié pour Kotlin:
la source
Obtenez la largeur et la hauteur de l'écran en termes de DP avec une bonne décoration:
Étape 1: créer une interface
Étape 2: créer une classe d'implémenteur
Étape 3: Obtenez la largeur et la hauteur de l'activité:
la source
Si vous voulez 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.
la source
Essaye ça:
la source
Votre problème est de lancer le flotteur à un entier, perdant ainsi sa précision. Vous devez également multiplier par le facteur et non pas diviser.
Faites ceci:
la source