1969 Stimmen

Wie man in Android die Bildschirmabmessungen als Pixel erhält

Ich habe einige benutzerdefinierte Elemente erstellt, die ich programmgesteuert in der oberen rechten Ecke platzieren möchte ( n Pixel vom oberen Rand und m Pixel vom rechten Rand). Daher muss ich die Bildschirmbreite und die Bildschirmhöhe ermitteln und dann die Position festlegen:

int px = screenWidth - m;
int py = screenHeight - n;

Wie erhalte ich screenWidth y screenHeight in der Hauptaktivität?

0 Stimmen

Verwenden Sie dp statt px, da dies Ihr Layout bei anderen Geräten verzerren würde.

0 Stimmen

Vergessen Sie nicht, mit getResources().getDisplayMetrics().density zu multiplizieren, um die Skalierung der Anzeige zu berücksichtigen.

0 Stimmen

Dies beweist, dass die am meisten hochgestufte Antwort nicht immer die beste ist (& viele Leute wiederholen Antworten, um sie zu wiederholen). Anstelle von getSize und der veralteten getWidth/getHeight-Kombination (Fehler ignorieren), versuchen Sie Balaji.K's getMetrics . Der Kommentar von Nik in seiner Antwort erklärt sogar getDisplayMetrics um die Größe der System-/Statusleiste zu berücksichtigen. Sie können auch verwenden Dichte wie jmaculate und LoungeKatt erklärt haben, um die EXAKT Wert: DisplayMetrics dm = getResources().getDisplayMetrics(); float fwidth = dm.density * dm.widthPixels; Getestet in Android v2.2 (API 8) und v4.0 mit guten Ergebnissen und keine Fehler/Warnungen .

19voto

David Corsalini Punkte 7560

Ist das nicht eine viel bessere Lösung? DisplayMetrics enthält alles, was Sie brauchen, und funktioniert ab API 1.

public void getScreenInfo(){
    DisplayMetrics metrics = new DisplayMetrics();
    getActivity().getWindowManager().getDefaultDisplay().getMetrics(metrics);

    heightPixels = metrics.heightPixels;
    widthPixels = metrics.widthPixels;
    density = metrics.density;
    densityDpi = metrics.densityDpi;
}

Sie können auch die tatsächliche Anzeige (einschließlich der Bildschirmdekoration, wie Statusleiste oder Software-Navigationsleiste) erhalten, indem Sie getRealMetrics aber das funktioniert nur bei 17+.

Habe ich etwas verpasst?

1 Stimmen

Es wird kein Platz für Bedienelemente auf dem Bildschirm abgezogen (wie bei Tablets oder Nexus-Geräten). Außerdem erhalte ich auf meinem 10"-Tablet einen anderen Wert (750 vs. 800), je nachdem, ob die Aktivität aktiv ist, wenn die Berechnung durchgeführt wird. Aber für meine Zwecke ist das mehr als in Ordnung. Vielen Dank an Sie!

19voto

Pijusn Punkte 10605

Dies ist der Code, den ich für diese Aufgabe verwende:

// `activity` is an instance of Activity class.
Display display = activity.getWindowManager().getDefaultDisplay();
Point screen = new Point();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) {
    display.getSize(screen);
} else {            
    screen.x = display.getWidth();
    screen.y = display.getHeight();
}

Scheint sauber genug zu sein und kümmert sich dennoch um die Veralterung.

17voto

Cristiana Chavez Punkte 11171
DisplayMetrics dimension = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dimension);
int w = dimension.widthPixels;
int h = dimension.heightPixels;

17voto

pellucide Punkte 3088

Ich möchte nur Francescos Antwort ergänzen. Der andere Beobachter, der besser geeignet ist, wenn Sie die Position im Fenster oder die Position im Bildschirm herausfinden wollen, ist ViewTreeObserver.OnPreDrawListener()

Dies kann auch verwendet werden, um andere Attribute einer Ansicht zu finden, die zum Zeitpunkt onCreate() meist unbekannt sind, z.B. die gescrollte Position, die skalierte Position.

17voto

NagarjunaReddy Punkte 8581

Ermitteln Sie die Breite und Höhe des Bildschirms:

width = getWindowManager().getDefaultDisplay().getWidth();
height = getWindowManager().getDefaultDisplay().getHeight();

Auf diese Weise können wir das neueste und höhere SDK 13 erhalten.

// New width and height
int version = android.os.Build.VERSION.SDK_INT;
Log.i("", " name == "+ version);
Display display = getWindowManager().getDefaultDisplay();
int width;
if (version >= 13) {
    Point size = new Point();
    display.getSize(size);
    width = size.x;
    Log.i("width", "if =>" +width);
}
else {
    width = display.getWidth();
    Log.i("width", "else =>" +width);
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X