639 Stimmen

Bildschirmbreite und -höhe in Android ermitteln

Wie kann ich die Breite und Höhe des Bildschirms ermitteln und diesen Wert in:

@Override protected void onMeasure(int widthSpecId, int heightSpecId) {
    Log.e(TAG, "onMeasure" + widthSpecId);
    setMeasuredDimension(SCREEN_WIDTH, SCREEN_HEIGHT - 
        game.findViewById(R.id.flag).getHeight());
}

2 Stimmen

2 Stimmen

0 Stimmen

Die aktualisierte richtige Antwort stackoverflow.com/a/67691009/4797289

10voto

Shubham Punkte 501
DisplayMetrics lDisplayMetrics = getResources().getDisplayMetrics();
int widthPixels = lDisplayMetrics.widthPixels;
int heightPixels = lDisplayMetrics.heightPixels;

10voto

Patrick Punkte 101

Da getMetrics und getRealMetrics veraltet sind, empfiehlt Google, die Bildschirmbreite und -höhe wie folgt zu bestimmen:

WindowMetrics windowMetrics = getActivity().getWindowManager().getMaximumWindowMetrics();
Rect bounds = windowMetrics.getBounds();
int widthPixels = bounds.width();
int heightPixels = bounds.height();

Ich habe jedoch eine andere Methode gefunden, die zu den gleichen Ergebnissen führt:

Configuration configuration = mContext.getResources().getConfiguration();
Display.Mode mode = display.getMode();
int widthPixels = mode.getPhysicalWidth();
int heightPixels = mode.getPhysicalHeight();

9voto

EpicPandaForce Punkte 75417

Keine der Antworten hier funktioniert korrekt für mehrere Chrome OS-Displays oder die bald erscheinenden Foldables.

Wenn Sie nach der aktuellen Konfiguration suchen, verwenden Sie immer die Konfiguration aus Ihrer aktuellen Aktivität in getResources().getConfiguration() . Verwenden Sie nicht die Konfiguration aus Ihrer Hintergrundaktivität oder die aus der Systemressource. Die Hintergrundaktivität hat keine Größe, und die Systemkonfiguration kann mehrere Fenster mit widersprüchlichen Größen und Ausrichtungen enthalten so dass keine verwertbaren Daten extrahiert werden können.

Die Antwort lautet also

val config = context.getResources().getConfiguration()
val (screenWidthPx, screenHeightPx) = config.screenWidthDp.dp to config.screenHeightDp.dp

8voto

Ali mohammadi Punkte 1671

Für kotlin-Benutzer

fun Activity.displayMetrics(): DisplayMetrics {
   val displayMetrics = DisplayMetrics()
   windowManager.defaultDisplay.getMetrics(displayMetrics)
   return displayMetrics
}

Und in Activity könnten Sie es wie folgt verwenden

     resources.displayMetrics.let { displayMetrics ->
        val height = displayMetrics.heightPixels
        val width = displayMetrics.widthPixels
    }

Oder in Fragmenten

    activity?.displayMetrics()?.run {
        val height = heightPixels
        val width = widthPixels
    }

7voto

android developer Punkte 111449

Vollständige Methode, die die wahre Auflösung liefert:

            WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
            Point size = new Point();
            wm.getDefaultDisplay().getRealSize(size);
            final int width = size.x, height = size.y;

Und da sich dies je nach Ausrichtung ändern kann, gibt es hier eine Lösung (in Kotlin), um es unabhängig von der Ausrichtung richtig zu machen:

/**
 * returns the natural orientation of the device: Configuration.ORIENTATION_LANDSCAPE or Configuration.ORIENTATION_PORTRAIT .<br></br>
 * The result should be consistent no matter the orientation of the device
 */
@JvmStatic
fun getScreenNaturalOrientation(context: Context): Int {
    //based on : http://stackoverflow.com/a/9888357/878126
    val windowManager = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager
    val config = context.resources.configuration
    val rotation = windowManager.defaultDisplay.rotation
    return if ((rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_180) && config.orientation == Configuration.ORIENTATION_LANDSCAPE || (rotation == Surface.ROTATION_90 || rotation == Surface.ROTATION_270) && config.orientation == Configuration.ORIENTATION_PORTRAIT)
        Configuration.ORIENTATION_LANDSCAPE
    else
        Configuration.ORIENTATION_PORTRAIT
}

/**
 * returns the natural screen size (in pixels). The result should be consistent no matter the orientation of the device
 */
@JvmStatic
fun getScreenNaturalSize(context: Context): Point {
    val screenNaturalOrientation = getScreenNaturalOrientation(context)
    val wm = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager
    val point = Point()
    wm.defaultDisplay.getRealSize(point)
    val currentOrientation = context.resources.configuration.orientation
    if (currentOrientation == screenNaturalOrientation)
        return point
    else return Point(point.y, point.x)
}

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