2017-04-10 1 views
1

Je voudrais obtenir la taille de l'écran des téléphones, mais il continue à me donner des valeurs erronées, je l'ai déjà utiliséObtenir la taille de l'écran ne pas utiliser getMetrics

WindowManager windowmanager = (WindowManager)  
getApplicationContext().getSystemService(Context.WINDOW_SERVICE); 
Display display = windowmanager.getDefaultDisplay(); 
DisplayMetrics displayMetrics = new DisplayMetrics(); 
display.getMetrics(displayMetrics); 

float deviceWidth = displayMetrics.widthPixels; 
float deviceHeight = displayMetrics.ydpi; 

J'ai essayé ce code aussi:

Resources resources = getResources(); 
Configuration config = resources.getConfiguration(); 
DisplayMetrics dm = resources.getDisplayMetrics(); 
// Note, screenHeightDp isn't reliable 
// (it seems to be too small by the height of the status bar), 
// but we assume screenWidthDp is reliable. 
// Note also, dm.widthPixels,dm.heightPixels aren't reliably pixels 
// (they get confused when in screen compatibility mode, it seems), 
// but we assume their ratio is correct. 
double screenWidthInPixels = (double)config.screenWidthDp *dm.density; 
double screenHeightInPixels = screenWidthInPixels * dm.heightPixels /dm.widthPixels; 
deviceWidth = (int)(screenWidthInPixels + .5); 
deviceHeight = (int)(screenHeightInPixels + .5); 

Et aussi que:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { 
    Point realSize = new Point(); 
    display.getRealSize(realSize); 
    deviceWidth= realSize.x; 
    deviceHeight = realSize.y; 
} 

Mais sur mon Samsung S7 sur sdk 7.0 je suis arrivé 1920x1080 ce qui est faux, car sur un S7 sur SDK 6.0.1 j'ai 2560x1440 qui est la vraie valeur. J'ai essayé beaucoup de solution mais je n'ai rien trouvé de bon.

Merci

Répondre

0

Votre code est correct. Juste au cas où vous vous demandez pourquoi vous obtenez ces valeurs, c'est parce que votre téléphone définira automatiquement la taille de résolution par défaut à 1920x1080 après mise à jour à 7.0 (Nougat) pour conserver l'autonomie de la batterie. L'une des nouvelles fonctionnalités de Nougat est l'option de mise à l'échelle, où vous pouvez régler votre téléphone (dans ce cas, S7) sur 3 modes disponibles (WQHD (2560x1440), FHD (1920x1080) et HD (1280x720)). Essayez d'aller au Settings -> Display et modifiez les paramètres en fonction de vos besoins. Vous pouvez en lire plus ici:

+0

Merci, n'a pas vu cela, j'ai changé les paramètres et eu le bon résultat, mais j'ai toujours un problème sur un émulé Nexus 5 mis à jour à 7.1.1, je reçois 1794x1080 au lieu de 1920x1080, avez-vous une idée pourquoi ? –

+0

Trouvé ma réponse, le problème était que la barre de boutons n'est pas considérée comme une partie de l'écran.Donc, si vous créez un périphérique virtuel avec des boutons physiques, vous n'aurez plus cette erreur. Idem pour les vrais appareils qui utilisent la barre de boutons, comme le Huawei P9. –

0

utiliser cette

getWindowManager().getDefaultDisplay().getHeight(); 
    getWindowManager().getDefaultDisplay().getWidth(); 
+0

J'ai déjà essayé cette méthode, même résultat –

0

Cela fonctionnera à coup sûr.

try { 
display.getRealSize(size); 
height = size.y; 
width=size.x; 
} catch (NoSuchMethodError e) { 
height = display.getHeight(); 
width=display.getWidth(); 
} 
+0

Même résultat, pas d'exception mais obtenu 1920x1080 –

+0

http://stackoverflow.com/a/43320354/7795876 est exact. – Hangman

0

Essayer this link

Display display = getWindowManager().getDefaultDisplay(); 
Point size = new Point(); 
display.getSize(size); 
int width = size.x; 
int height = size.y; 
+0

Même résultat, 1920x1080 sur mon Samsung S7 sur sdk 7.0 –

0

Le procédé de retour en dessous d'un Point qui contiennent affichage taille (x en tant que largeur et y en tant que hauteur):

public static Point checkDisplaySize(Context context) { 
     Point tempDisplaySize = new Point(); 
     try { 
      WindowManager manager = (WindowManager) context().getSystemService(Context.WINDOW_SERVICE); 
      if (manager != null) { 
       Display display = manager.getDefaultDisplay(); 
       if (display != null) { 
        display.getSize(tempDisplaySize); 
        Log.d("tmessages", "display size = " + displaySize.x + " " + displaySize.y); 
       } 
      } 
     } catch (Exception e) { 
      Log.e("tmessages", e.getMessage(), e); 
     } 
     return tempDisplaySize; 
    } 

PS: Ceci est la Code Télégramme utilise pour obtenir la taille d'affichage.

+0

j'ai essayé cette méthode, mais a ce journal: taille de tmessagesdisplay = 1080 1920 435.42825x431.57477 –

+0

bien « 1080 1920 » est la taille de votre appareil en pixel –

+0

Mais je sais que 1920x1080 est faux, parce que si vous vérifiez sur le site de Samsung, vous trouverez 2560x1440, valeur que j'ai trouvé une fois, mais sur un Samsung S7 sur sdk 6.0.1 mais depuis que je l'ai mis à jour aucun moyen de trouver cette valeur. Et j'ai essayé sur d'autres téléphones, je reçois des valeurs erronées aussi –