2016-07-23 26 views
2

Ich versuche, die Pixelbreite/Höhe des Geräts zum Platzieren von Elementen und Kartierung Berührungsereignisse auf dem Bildschirm zu bekommen, aber nicht den gewünschten Effekt (beachten Sie unten rechts) bündig mit dem Boden rechts):Android getDisplayMetrics() gibt keine genaue Anzeigegröße zurück

White square should be flush in the lower right corner

// screen size 
    DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics(); 
    float ScrDensity = metrics.density; 
    int metricHeight = metrics.heightPixels;// 
    int metricWidth = metrics.widthPixels;// 

    Log.i("AllMetrics", metrics.toString()); 

    // temp 
    int rightButton_diameter = 100; 
    int rightButton_xpos = metricWidth - rightButton_diameter; 
    int rightButton_ypos = metricHeight - rightButton_diameter; 

Wo AllMetrics zurück:

DisplayMetrics{density=2.0, width=720, height=1184, scaledDensity=2.0, xdpi=320.0, ydpi=320.0} 

ich stelle fest, dass die retu rned height unterscheidet sich auch von den im Virtual Device Manager (API 19, Android 4.4) aufgeführten 720x1280 und die x/y-Positionen der Berührungsereignisse scheinen genau zu den gezeichneten Elementen zu passen (dh der anklickbare Bereich der Schaltfläche ist derselbe wie wo) Es wird gezeichnet)

Ist dies ein Konfigurationsfehler oder verwende ich die falsche Methode zum Abrufen der Bildschirmposition?

+1

height = 1184 da es nicht Statusbar Höhe enthält, die 96 ist, geben diese zwei Zahlen zusammen 1280, die physikalische Bildschirmhöhe ist – pskink

+0

BTW was genau wollen Sie erreichen? – pskink

+0

Legen Sie einfach die Dinge auf den Bildschirm für den Anfang. Ich bemerke, wenn ich ab 0,0 zeichne, ist es bündig mit der oberen linken Seite. Sollte die Statusleiste die 69 nicht ersetzen? Ansonsten fehlt nur Höhe vom Boden und nicht von oben. – Gavin

Antwort

2

prüfen Dieser Code funktioniert es für mich

DisplayMetrics dm = new DisplayMetrics(); 
getWindowManager().getDefaultDisplay().getMetrics(dm); 
int width = dm.widthPixels; 
int height = dm.heightPixels; 

Außerhalb der Aktivität können Sie versuchen, diese

((Activity) getContext()).getWindowManager().getDefaultDisplay().getMetrics(dm) 
+1

Mein Verständnis ist, dass getWindowManager() nicht außerhalb der Hauptaktivität verwendet werden kann? (und tatsächlich gibt "Methode kann nicht aufgelöst werden", wenn ich versuche, es zu verwenden) Entschuldigung, wenn ich mich irre. Das ist mein erster Furore in Android Dev. – Gavin

+1

Wenn Sie außerhalb der Aktivität den Pass Aktivitätskontext verwenden möchten ... viel Glück. –

+0

Wird dann nur als Methode des Hauptaktivitätskontextes zugegriffen? Verwenden: this.mainActivityContext.getWindowManager(). GetDefaultDisplay(). GetMetrics (dm); gibt das gleiche Problem zurück, getWindowManager() wurde nicht aufgelöst. – Gavin

0

Um die DisplayMetrics Mitglieder zugreifen, initialisieren ein Objekt wie folgt aus:

DisplayMetrics metrics = new DisplayMetrics(); getWindowManager(). GetDefaultDisplay(). GetMetrics (Metriken);

+1

Dies funktioniert nicht außerhalb der Hauptaktivität. – Gavin