386 Stimmen

Höhe der Statusleiste in Android

Wie hoch ist die Statusleiste in Android? Ist sie immer gleich hoch?

Nach meinen Messungen scheint es 25dp zu sein, aber ich bin nicht sicher, ob es auf allen Plattformen die gleiche Höhe hat.

(Ich möchte dies wissen, um einen Übergang von einer Aktivität, die keine Statusleiste hat, zu einer, die eine hat, richtig zu implementieren)

401voto

Jorgesys Punkte 119076

Diese Frage wurde bereits beantwortet... Höhe der Statusleiste?

Update ::

Aktuelle Methode:

ok, die Höhe der Statusleiste hängt von der Bildschirmgröße ab, z. B. bei einem Gerät mit 240 X 320 Bildschirmgröße beträgt die Höhe der Statusleiste 20px, bei einem Gerät mit 320 X 480 Bildschirmgröße beträgt die Höhe der Statusleiste 25px, bei einem Gerät mit 480 x 800 muss die Höhe der Statusleiste 38px betragen

so empfehle ich, dieses Skript zu verwenden, um die Höhe der Statusleiste zu erhalten

Rect rectangle = new Rect();
Window window = getWindow();
window.getDecorView().getWindowVisibleDisplayFrame(rectangle);
int statusBarHeight = rectangle.top;
int contentViewTop = 
    window.findViewById(Window.ID_ANDROID_CONTENT).getTop();
int titleBarHeight= contentViewTop - statusBarHeight;

   Log.i("*** Elenasys :: ", "StatusBar Height= " + statusBarHeight + " , TitleBar Height = " + titleBarHeight); 

(alte Methode), um die Höhe der Statusleiste auf dem Bildschirm onCreate() Methode Ihrer Aktivität, verwenden Sie diese Methode:

public int getStatusBarHeight() { 
      int result = 0;
      int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
      if (resourceId > 0) {
          result = getResources().getDimensionPixelSize(resourceId);
      } 
      return result;
}

235voto

Ben Clayton Punkte 78173

Von allen Codebeispielen, die ich verwendet habe, um die Höhe der Statusleiste zu erhalten, scheint das einzige, das tatsächlich in der onCreate Methode eines Activity ist dies:

public int getStatusBarHeight() {
    int result = 0;
    int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
    if (resourceId > 0) {
        result = getResources().getDimensionPixelSize(resourceId);
    }
    return result;
}

Offenbar wird die tatsächliche Höhe der Statusleiste als Android-Ressource gespeichert. Der obige Code kann in eine ContextWrapper Klasse (z.B. eine Activity ).

Gefunden bei http://mrtn.me/blog/2012/03/17/get-the-height-of-the-status-bar-in-Android/

68voto

Niklas Punkte 20301

Festcodierung der Größe oder Verwendung von Reflexion, um den Wert von status_bar_height wird als schlechte Praxis angesehen. Chris Banes auf der Droidcon in New York darüber gesprochen . Der empfohlene Weg, um die Größe der Statusleiste zu erhalten, ist über die Funktion OnApplyWindowInsetsListener :

myView.setOnApplyWindowInsetsListener { view, insets -> {
  val statusBarSize = insets.systemWindowInsetTop
  return insets
}

Dies wurde in API 20 hinzugefügt und wird auch über ViewAppCompat .

51voto

Grantland Chew Punkte 2560

Auf MDPI-Geräten ist die Statusleiste 25px groß. Wir können dies als Basis verwenden und es mit der Dichte (aufgerundet) multiplizieren, um die Höhe der Statusleiste auf jedem Gerät zu erhalten:

int statusBarHeight = Math.ceil(25 * context.getResources().getDisplayMetrics().density);

Zur Orientierung: ldpi=.75, mdpi=1, hdpi=1.5, xhdpi=2

40voto

android developer Punkte 111449

Ich habe einige Lösungen zusammengeführt:

public static int getStatusBarHeight(final Context context) {
    final Resources resources = context.getResources();
    final int resourceId = resources.getIdentifier("status_bar_height", "dimen", "android");
    if (resourceId > 0)
        return resources.getDimensionPixelSize(resourceId);
    else
        return (int) Math.ceil((VERSION.SDK_INT >= VERSION_CODES.M ? 24 : 25) * resources.getDisplayMetrics().density);
    }

eine andere Alternative:

    final View view = findViewById(android.R.id.content);
    runJustBeforeBeingDrawn(view, new Runnable() {
        @Override
        public void run() {
            int statusBarHeight = getResources().getDisplayMetrics().heightPixels - view.getMeasuredHeight();
        }
    });

EDIT: Alternative zu runJustBeforeBeingDrawn: https://stackoverflow.com/a/28136027/878126

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