Da Android N einen geteilten Bildschirm einführt, kann die Fenstergröße Ihrer App halb so groß sein wie ursprünglich. Ich habe festgestellt, dass getActivity().getWindowManager().getDefaultDisplay().getMetrics(metrics);
nicht mehr immer die tatsächliche Bildschirmgröße des Geräts zurückgibt, da im Split-Screen-Modus die Höhe des Displays stattdessen die Fensterhöhe der App ist. Gibt es eine andere API, die ich verwenden kann, um die tatsächliche Bildschirmgröße zu erhalten?Wie bekomme ich die tatsächliche Bildschirmgröße nach Android N?
Antwort
Display.getRealMetrics(DisplayMetrics)
wird die tatsächliche Anzeigegröße zurückgeben.
Eine Methode in der Kern-API, die mit 'getReal' für diese lange beginnt, ist wirklich beunruhigend. Wir müssen das wirklich aufräumen. – milosmns
Bis dahin konnte ich keine passende Lösung dafür finden, aber ich handle mit der dichteDpi von jeder Auflösung, die geändert wird. Genau wie folgt aus:
private int getScreenDensityDPI() {
DisplayMetrics metrics = new DisplayMetrics();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
getWindowManager().getDefaultDisplay().getRealMetrics(metrics);
} else {
getWindowManager().getDefaultDisplay().getMetrics(metrics);
}
return metrics.densityDpi;
}
private int getNumberItemsByScreenResolution() {
int densityDPI = getScreenDensityDPI();
if (densityDPI <= 140) {
return 6;
} else if (densityDPI <= 160) {
return 5;
} else {
return 4;
}
}
Während niedrigsten der densityDPI ist, am höchsten ist die Auflösung des Displays wird in Ihrem Android-N-Gerät sein.
Sie können die tatsächliche Gerätegröße im Multi-Window-Modus mit Display
oder DisplayMetrics
erreichen.
Mit Display:
private void findRealSize(Activity activity)
{
Point size = new Point();
Display display = activity.getWindowManager().getDefaultDisplay();
if (Build.VERSION.SDK_INT >= 17)
display.getRealSize(size);
else
display.getSize(size);
int realWidth = size.x;
int realHeight = size.y;
Log.i("LOG_TAG", "realWidth: " + realWidth + " realHeight: " + realHeight);
}
Mit DisplayMetrics:
private void findRealSize(Activity activity)
{
DisplayMetrics displayMetrics = new DisplayMetrics();
if (Build.VERSION.SDK_INT >= 17)
{
activity.getWindowManager().getDefaultDisplay().getRealMetrics(displayMetrics);
}
else
{
activity.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
}
int realWidth = displayMetrics.widthPixels;
int realHeight = displayMetrics.heightPixels;
Log.i("LOG_TAG", "realWidth: " + realWidth + " realHeight: " + realHeight);
}
Nichts davon funktionierte für sasmung S7, Android 7 –
Warum wollen Sie die aktuelle Bildschirmgröße? – ianhanniballake
"Die Fenstergröße Ihrer App kann halb so groß sein" - Sobald wir Geräte erhalten, die den Freiform-Multifenstermodus unterstützen, kann Ihre Fenstergröße viel weniger als die Hälfte des Bildschirms betragen. – CommonsWare
@ianhanniballake sagen Sie haben eine Dienstprogramm-App, die Sie über die Bildschirmgröße Ihres Geräts (Breite, Höhe, Diagonale) oder über Apps informiert, die versuchen, die Bildschirmgrößen der Benutzer zu erfassen/zu protokollieren. Ich bin nur neugierig, ob es eine alternative einfache Möglichkeit, es mit Android zu tun N –