Ich lief in das gleiche Problem. Auf Telefongeräten im Hochformat ist die Aktionsleiste geteilt. So befinden sich Menüpunkte in der oberen Aktionsleiste und die Tabs in einer zweiten Aktionsleiste (Tableiste) darunter. Ich habe einfach keine Möglichkeit gefunden, die Höhe der Aktionsleiste zu bestimmen: um zu sehen, welcher Platz auf dem Bildschirm übrig ist, bevor ich meinen Bildschirm erstelle.
Also habe ich eine Annahme:
- auf kleine und normalen Bildschirmgröße Geräten die ActionBar im Portrait-Modus aufgespalten wird
- auf große Bildschirmgröße Geräten (wie Nexus 7) die ActionBar auch im Portrait-Modus aufgespalten wird
- auf xlarge Bildschirmgröße Geräte (Tabletten) die ActionBar nicht
im Portrait-Modus aufgespalten wird
So unterscheiden ich die verschiedenen Bildschirmgrößen und erstellt eine Bool Ressource
<!-- res/values/booleans.xml -->
<?xml version="1.0" encoding="utf-8"?>
<resources>
<bool name="is_split_actionbar">false</bool>
</resources>
<!-- res/values-small-port/booleans.xml
res/values-normal-port/booleans.xml
res/values-large-port/booleans.xml -->
<?xml version="1.0" encoding="utf-8"?>
<resources>
<bool name="is_split_actionbar">true</bool>
</resources>
Im Code greife ich auf den Wert wie folgt aus:
Boolean isSplit = getResources().getBoolean(R.bool.is_split_actionbar);
Um die ActionBar Höhe im onCreateView get() Methode:
TypedValue typedVal = new TypedValue();
getActivity().getTheme().resolveAttribute(R.attr.actionBarSize, typedVal, true); // use android.R when not using ABS
int actionBarHeight = getResources().getDimensionPixelSize(typedVal.resourceId);
Und die doppelte Höhe, wenn die ActionBar ist aufgeteilt:
if(isSplit)
actionBarHeight = actionBarHeight * 2;
Es ist keine ideale Lösung, aber für mich funktioniert das.
Ja, ich muss auch wissen, ob es überhaupt existiert. Jedenfalls wurde mir (von Roman glaube ich) zu Android Office Hours gesagt, dass dies einfach nicht möglich sei. Zumindest nicht auf eine einfache und direkte Art und Weise. Daher experimentieren wir jetzt mit einer einzelnen oberen Aktionsleiste und ahmen stattdessen die untere Aktionsleiste mit einer regulären Ansicht nach. Dies löst nicht nur dieses Problem, sondern auch ein anderes, bei dem wir einige Aktionen auf die oberste Aktionsleiste "erzwingen" wollten. – pakerfeldt