Wie hoch ist die Statusleiste in Android? Ist es immer das gleiche?
Aus meinen Messungen geht hervor, dass es 25 dp ist, aber ich bin mir nicht sicher, ob es auf allen Plattformen die gleiche Höhe hat.
(Ich möchte dies wissen, um einen Überblendungsübergang von einer Aktivität ohne Statusleiste zu einer Aktivität ohne Statusleiste ordnungsgemäß zu implementieren.)
Antworten:
Diese Frage wurde schon einmal beantwortet ... Höhe der Statusleiste?
Update ::
Aktuelle Methode:
OK, die Höhe der Statusleiste hängt von der Bildschirmgröße ab. Bei einem Gerät mit einer Bildschirmgröße von 240 x 320 beträgt die Höhe der Statusleiste beispielsweise 20 Pixel. Bei einem Gerät mit einer Bildschirmgröße von 320 x 480 beträgt die Höhe der Statusleiste 25 Pixel Bei Geräten mit 480 x 800 muss die Höhe der Statusleiste 38px betragen
Daher empfehle ich, dieses Skript zu verwenden, um die Höhe der Statusleiste zu ermitteln
(alte Methode)
onCreate()
Verwenden Sie diese Methode , um die Höhe der Statusleiste für die Methode Ihrer Aktivität zu ermitteln:quelle
window.getDecorView().getWindowVisibleDisplayFrame(rectangle)
Dies ist kein korrekter Weg, um die Höhe der Statusleiste zu ermitteln, wenn Sie sich im Mehrfenstermodus + Porträtdrehung + zweites Fenster befinden. Sie erhalten einen riesigen Wert (einschließlich der 1. Höhe).Von allen Codebeispielen, die ich verwendet habe, um die Höhe der Statusleiste zu ermitteln, scheint das einzige, das tatsächlich in der
onCreate
Methode von a zu funktionieren scheint, Folgendes zu seinActivity
:Anscheinend wird die tatsächliche Höhe der Statusleiste als Android-Ressource beibehalten. Der obige Code kann einer
ContextWrapper
Klasse (zActivity
. B. einer ) hinzugefügt werden .Gefunden unter http://mrtn.me/blog/2012/03/17/get-the-height-of-the-status-bar-in-android/
quelle
Auf MDPI-Geräten beträgt die Statusleiste 25 Pixel. 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:
Als Referenz: ldpi = 0,75, mdpi = 1, hdpi = 1,5, xhdpi = 2
quelle
Das Hardcodieren der Größe oder das Verwenden von Reflexion, um den Wert von zu erhalten,
status_bar_height
wird als schlechte Praxis angesehen. Chris Banes hat auf der Droidcon New York darüber gesprochen . Die empfohlene Methode zum Abrufen der Größe der Statusleiste ist der OnApplyWindowInsetsListener :Dies wurde in API 20 hinzugefügt und wird auch über ViewAppCompat zurückportiert .
quelle
Ich habe einige Lösungen zusammengeführt:
eine andere Alternative:
BEARBEITEN: Alternative zu runJustBeforeBeingDrawn: https://stackoverflow.com/a/28136027/878126
quelle
Gemäß den Google-Designrichtlinien ; Die Höhe der Statusleiste beträgt 24 dp.
Wenn Sie die Höhe der Statusleiste in Pixel erhalten möchten, können Sie die folgende Methode verwenden:
die von Aktivität mit aufgerufen werden kann mit:
quelle
Die Standardhöhe war 25dp. Mit Android Marshmallow (API 23) wurde die Höhe auf 24dp reduziert.
Update: Bitte beachten Sie, dass die Verwendung einer statischen Höhe für die Statusleiste seit Beginn des Zeitalters der Kerben und Lochkameras nicht mehr funktioniert. Bitte verwenden Sie stattdessen Fenstereinsätze!
quelle
Dies funktioniert auch mit dem Refrence- Link
quelle
Ich habe das gleiche Problem, dass ich die Höhe der Statusleiste in einem onCreate abrufen muss. Das funktioniert bei mir.
Innerhalb des onCreate:
Sehen:
http://developer.android.com/reference/android/util/DisplayMetrics.html http://developer.android.com/guide/practices/ui_guidelines/icon_design.html
quelle
Die offizielle Größe ist
24dp
, wie von Google offiziell auf der Android Design-Webseite angegeben .quelle
Ja, wenn ich es mit View versuche, liefert es das Ergebnis von 25px. Hier ist der gesamte Code:
quelle
quelle
Versuche dies:
Bei der onCreate-Methode für die Aktivität hat es bei mir nicht funktioniert, aber beim Einfügen in einen onClickListener und bei einer Messung von 25
quelle
Die Höhe der Statusleiste beträgt 24dp in Android 6.0
Die Antwort finden Sie im Quellcode: Frameworks \ Base \ Core \ Res \ Res \ Values \ Dimens.xml
quelle
@android:dimen/status_bar_height
funktioniert nicht bei mirUm dies zu lösen, habe ich einen Kombinationsansatz verwendet. Dies ist erforderlich, da auf Tablets die Systemleiste bereits die Pixel subtrahiert, wenn display.getHeight () aufgerufen wird. Also überprüfe ich zuerst, ob eine Systemleiste vorhanden ist, und dann Ben Claytons Ansatz, der auf Telefonen gut funktioniert.
quelle
Dank @Niklas +1 ist dies der richtige Weg.
Bitte entschuldigen Sie, wenn der Code nicht 100% korrekt ist, konvertieren Sie ihn von Xamarin C #, aber dies ist das Richtige. Funktioniert mit Kerben usw.
quelle
Umgeschaltete Vollbildlösung:
Diese Lösung mag wie eine Problemumgehung aussehen, berücksichtigt jedoch tatsächlich, ob Ihre App im Vollbildmodus angezeigt wird (auch bekannt als Ausblenden der Statusleiste) oder nicht:
Wenn Ihre App derzeit im Vollbildmodus angezeigt
barheight
wird, entspricht dies 0.Persönlich musste ich dies verwenden, um absolute TouchEvent-Koordinaten zu korrigieren, um die Statusleiste wie folgt zu berücksichtigen:
Und das wird die absolute y-Koordinate erhalten, ob die App Vollbild ist oder nicht.
Genießen
quelle
Unter Android 4.1 und höher können Sie festlegen, dass der Inhalt Ihrer Anwendung hinter der Statusleiste angezeigt wird, damit die Größe des Inhalts nicht geändert wird, wenn die Statusleiste ausgeblendet und angezeigt wird. Verwenden Sie dazu SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN. Möglicherweise müssen Sie auch SYSTEM_UI_FLAG_LAYOUT_STABLE verwenden, damit Ihre App ein stabiles Layout beibehält.
Wenn Sie diesen Ansatz verwenden, liegt es in Ihrer Verantwortung, sicherzustellen, dass kritische Teile der Benutzeroberfläche Ihrer App (z. B. die in einer Maps-Anwendung integrierten Steuerelemente) nicht von Systemleisten abgedeckt werden. Dies könnte Ihre App unbrauchbar machen. In den meisten Fällen können Sie dies tun, indem Sie das Attribut android: fitSystemWindows zu Ihrer XML-Layoutdatei hinzufügen, das auf true festgelegt ist. Dadurch wird der Abstand der übergeordneten ViewGroup angepasst, um Platz für die Systemfenster zu lassen. Dies ist für die meisten Anwendungen ausreichend.
In einigen Fällen müssen Sie jedoch möglicherweise die Standardauffüllung ändern, um das gewünschte Layout für Ihre App zu erhalten. Überschreiben Sie fitSystemWindows (Rect-Einfügungen), um direkt zu steuern, wie Ihr Inhalt relativ zu den Systemleisten angeordnet ist (die einen Bereich einnehmen, der als "Inhaltseinfügungen" des Fensters bezeichnet wird). Die Methode fitSystemWindows () wird von der Ansichtshierarchie aufgerufen, wenn sich die Inhaltseinfügungen für ein Fenster geändert haben, damit das Fenster seinen Inhalt entsprechend anpassen kann. Durch Überschreiben dieser Methode können Sie die Einfügungen (und damit das Layout Ihrer App) beliebig behandeln.
Formular: https://developer.android.com/training/system-ui/status.html#behind
quelle
Wenn Sie genau die Größe VS Höhe kennen
mögen
Bei einem Gerät mit einer Bildschirmgröße von 320 x 480 beträgt die Statusleistenhöhe beispielsweise 25 Pixel. Bei einem Gerät mit 480 x 800 muss die Statusleistenhöhe 38 Pixel betragen
Dann können Sie einfach die Breite Ihrer Ansicht / die Bildschirmgröße abrufen. Sie können einfach eine if else-Anweisung verwenden, um die Höhe der Statusleiste abzurufen
quelle
Der Grund, warum die Top-Antwort für einige Benutzer nicht funktioniert, liegt darin, dass Sie die Abmessungen einer Ansicht erst abrufen können, wenn sie zum Rendern bereit ist. Verwenden Sie ein
OnGlobalLayoutListener
, um die angegebenen Abmessungen zu erhalten, wenn Sie tatsächlich können:Dies ist die zuverlässigste Methode.
quelle
Da der Mehrfenstermodus jetzt verfügbar ist, hat Ihre App möglicherweise keine Statusleiste oben.
Die folgende Lösung behandelt alle Fälle automatisch für Sie.
oder programmatisch
Sie können auch Root-Ansicht von erhalten
Weitere Informationen zum Abrufen der Root-Ansicht finden Sie unter https://stackoverflow.com/a/4488149/9640177
quelle
Dieses Problem wurde kürzlich für mich aufgrund der Kerbe in meinem Pixel 3XL relevant. Ich mochte die Lösung für Android-Entwickler sehr , aber ich wollte in der Lage sein, die Höhe der Statusleiste nach Belieben zu ermitteln, da dies speziell für eine Vollbildanimation erforderlich war, die ich abspielen musste. Die folgende Funktion ermöglichte eine zuverlässige Abfrage:
Und dann in der Aktivitätsklasse:
Sie möchten natürlich eine schwache Referenz der Aktivität an den statischen Parameter der Helper-Klassenmethode übergeben, aber der Kürze halber habe ich in diesem Beispiel darauf verzichtet. Die
blurBitmap
underrorHudFrameLayout
werden aus demselben Grund weggelassen, da sie nicht direkt mit dem Abrufen der Höhe der Statusleiste zusammenhängen.quelle
Kotlin-Version, die zwei beste Lösungen kombiniert
status_bar_height
Wert, wenn vorhandenstatus_bar_height
nicht vorhanden, wird die Höhe der Statusleiste aus dem Fensterdekor berechnetquelle