Ich versuche, die Höhe des ActionBar
(mit Sherlock) jedes Mal zu ermitteln, wenn eine Aktivität erstellt wird (insbesondere, um Konfigurationsänderungen bei Drehung zu behandeln, bei denen sich die ActionBar-Höhe ändern kann).
Dafür verwende ich die Methode, ActionBar.getHeight()
die nur funktioniert, wenn die ActionBar
angezeigt wird.
Wenn die erste Aktivität zum ersten Mal erstellt wird, kann ich getHeight()
den onCreateOptionsMenu
Rückruf anrufen . Diese Methode wird jedoch nicht aufgerufen.
Meine Frage ist also, wann ich getHeight () aufrufen und sicher sein kann, dass es nicht 0 zurückgibt. Oder wenn es nicht möglich ist, wie kann ich die Höhe der ActionBar einstellen?
In XML sollten Sie dieses Attribut verwenden:
quelle
android.support.v7.appcompat.R.attr.actionBarSize
. Wenn Sie es in Layout-XML verwenden möchten ,android:paddingTop="?attr/actionBarSize"
. Funktioniert überall gut.Ok, ich habe mehrmals gegoogelt und bin zu diesem Beitrag gekommen, daher denke ich, dass es gut ist, nicht nur für Sherlock, sondern auch für Appcompat beschrieben zu werden:
Höhe der Aktionsleiste mit appCompat
Ähnlich wie bei der @ Anthony-Beschreibung finden Sie sie mit folgendem Code (ich habe gerade die Ressourcen-ID geändert):
Pre Sandwitch Problem
Ich benötigte die Höhe der Aktionsleiste, da meine Ansicht auf Geräten vor ICE_CREAM_SANDWITCH die Aktionsleiste überlappte. Ich habe versucht, android: layout_marginTop = "? Android: attr / actionBarSize", android: layout_marginTop = "? Attr / actionBarSize" einzustellen, Überlappung auf view / actionbar und sogar feste Actionbar-Höhe mit benutzerdefiniertem Thema festzulegen, aber nichts hat funktioniert. So sah es aus:
Leider habe ich herausgefunden, dass ich mit der oben beschriebenen Methode nur die Hälfte der Höhe erhalte (ich gehe davon aus, dass die Optionsleiste nicht vorhanden ist). Um das Problem vollständig zu beheben, muss ich die Höhe der Aktionsleiste verdoppeln und alles scheint in Ordnung zu sein:
Wenn jemand eine bessere Lösung kennt (als actionBarHeight zu verdoppeln), werde ich mich freuen, es mir mitzuteilen, da ich aus der iOS-Entwicklung stamme und die meisten Dinge in der Android-Ansicht ziemlich verwirrend fanden :)
Grüße,
hris.to.
quelle
ActionBar.getHeight()
. Je nach Situation kann dies auch für Sie funktionieren.layout_gravity="center_vertical"
? Ändern Sie es in"bottom"
. Android 2.3 behandelt den Rand in FrameLaoyut anders als neuere Androiden.Die @ Anthony-Antwort funktioniert für Geräte, die unterstützen,
ActionBar
und für Geräte, die nur dieSherlock Action Bar
folgende Methode unterstützen, muss verwendet werdenquelle
com.actionbarsherlock.R.attr.actionBarSize
sowohl für Android 2.3 als auch für 4.0 gearbeitet, es sieht also so aus, als könnten Sie dies unabhängig von der Android-Version verwenden.Ich denke, der sicherste Weg wäre:
quelle
else if (true == getTheme().resolveAttribute( android.support.v7.appcompat.R.attr.actionBarSize, tv, true)) { actionBarHeight = TypedValue.complexToDimensionPixelSize( tv.data,getResources().getDisplayMetrics()); }
Um die Höhe von
ActionBar
festzulegen, können Sie neueTheme
wie diese erstellen :und setzen Sie dies
Theme
auf IhreActivity
:quelle
Java:
xml:
quelle
Wenn Sie eine Symbolleiste als Aktionsleiste verwenden,
Verwenden Sie dann einfach die layout_height der Symbolleiste.
quelle
Mit dieser Funktion können Sie die Höhe der Aktionsleiste ermitteln.
quelle
Diese Hilfsmethode sollte für jemanden nützlich sein. Beispiel:
int actionBarSize = getThemeAttributeDimensionSize(this, android.R.attr.actionBarSize);
quelle
Sie müssen dies nur hinzufügen.
quelle
Ich habe einen allgemeineren Weg gefunden, es zu entdecken:
Dabei ist ' mainView ' die Stammansicht Ihres Layouts.
Die Idee ist im Grunde, die Y-Position der Hauptansicht zu erhalten, da sie direkt unter der Aktionsleiste (oder Symbolleiste) festgelegt ist.
quelle
Die Höhe der Aktionsleiste unterscheidet sich je nach angewendetem Thema. Wenn Sie AppCompatActivity verwenden, unterscheidet sich die Höhe in den meisten Fällen von der normalen Aktivität.
Wenn Sie AppCompatActivity verwenden , sollten Sie R.attr.actionBarSize anstelle von android.R.attr.actionBarSize verwenden
quelle
In XML können Sie? Attr / actionBarSize verwenden. Wenn Sie jedoch Zugriff auf diesen Wert in Java benötigen, müssen Sie den folgenden Code verwenden:
quelle
Eine fertige Methode, um die beliebteste Antwort zu erfüllen:
quelle
Hier ist eine aktualisierte Version mit Kotlin, die ich verwendet habe, vorausgesetzt, das Telefon ist höher als Honeycomb:
quelle
Wenn Sie Xamarin / C # verwenden, ist dies der Code, nach dem Sie suchen:
quelle
quelle
Eine einfache Möglichkeit, die Höhe der Aktionsleiste zu ermitteln, ist die Aktivitätsmethode
onPrepareOptionMenu
.quelle
In javafx (mit Gluon) wird die Höhe zur Laufzeit oder ähnlichem eingestellt. Während Sie in der Lage sind, die Breite wie gewohnt zu erhalten ...
double width = appBar.getWidth();
Sie müssen einen Listener erstellen:
GluonApplication application = this;
... und nehmen Sie den letzten Wert, zu dem er geändert wurde. Um die Höhe zu bekommen.
quelle
Nachdem ich alles, was da draußen ist, ohne Erfolg ausprobiert hatte, fand ich zufällig eine funktionale und sehr einfache Möglichkeit, die Standardhöhe der Aktionsleiste zu ermitteln.
Nur in API 25 und 24 getestet
C #
Java
quelle