2017-04-10 3 views
1

mit würde Ich mag die Größe des Bildschirms der Handys bekommen, aber es hält mich falsche Werte geben, habe ich bereitsErmittelt die Größe des Bildschirms nicht 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; 

ich diesen Code zu versucht:

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); 

Und auch das:

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

Aber auf meinem Samsung S7 auf sdk 7.0 I 1920x1080 bekam, die da auf einer S7 ist falsch auf SDK 6.0.1 habe ich 2560x1440 das ist der wahre Wert. Ich habe eine Menge Lösung versucht, aber nichts gutes gefunden.

Dank

Antwort

0

Ihr Code ist korrekt. Nur für den Fall, dass Sie sich fragen, warum Sie diese Werte erhalten, liegt es daran, dass Ihr Telefon automatisch die Standardauflösung auf 1920x1080 setzt, nachdem es auf 7,0 (Nougat) aktualisiert wurde, um die Akkulaufzeit zu erhalten. Eine der neuen Funktionen von Nougat ist die Skalierungsoption, mit der Sie Ihr Telefon (in diesem Fall S7) auf 3 verfügbare Modi einstellen können (WQHD (2560x1440), FHD (1920x1080) und HD (1280x720)). Versuchen Sie, zu gehen Settings -> Display und ändern Sie die Einstellungen nach Ihren Bedürfnissen. Sie können mehr hier lesen: Galaxy S7 on Nougat defaults to 1080p

+0

Danke, habe das nicht gesehen, ich habe die Einstellungen geändert und hatte das richtige Ergebnis, aber ich habe immer noch Probleme mit einem emulierten Nexus 5, aktualisiert auf 7.1.1, ich bekomme 1794x1080 statt 1920x1080, hast du eine Ahnung warum ? –

+0

Fand meine Antwort, das Problem war, dass die Symbolleiste nicht als Teil des Bildschirms angesehen wird.Wenn Sie also ein virtuelles Gerät mit physikalischen Schaltflächen erstellen, wird dieser Fehler nicht mehr auftreten. Dasselbe gilt für echte Geräte, die eine Tastenleiste verwenden, wie das Huawei P9. –

0

Verwendung dieses

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

Ich habe bereits versucht, diese Methode, gleiche Ergebnisse –

0

für sicher, dass dies funktionieren wird.

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

gleiches Ergebnis, da keine Ausnahme, sondern bekam 1920x1080 –

+0

http://stackoverflow.com/a/43320354/7795876 ist richtig. – Hangman

0

this link

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

Gleiches Ergebnis, 1920x1080 auf meinem Samsung S7 auf SDK 7.0 –

0

Verfahren unten Versuchen Rückkehr ein Point die Anzeige Größe (x, wie Breite und y als Höhe) enthalten:

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: Dies ist die ist Code Telegramm wird verwendet, um die Anzeigegröße zu erhalten.

+0

Ich versuchte diese Methode, aber habe dieses Protokoll: tmessagesdisplay size = 1080 1920 435.42825x431.57477 –

+0

gut "1080 1920" ist Ihre Gerätegröße in Pixel –

+0

Aber ich weiß, dass 1920x1080 ist falsch, denn wenn du auf der Samsung Seite nachschaust, wirst du 2560x1440 finden, den Wert habe ich einmal gefunden, aber auf einem Samsung S7 auf SDK 6.0.1 aber seit ich es aktualisiert habe gibt es keine Möglichkeit diesen Wert zu finden. Und ich versuchte auf anderen Telefonen, die ich falsche Werte auch tue –

Verwandte Themen