私は同じ問題に遭遇しました。ポートレートモードの電話デバイスでは、アクションバーが分割されます。したがって、メニュー項目は上部のアクションバーにあり、タブは下の2番目のアクションバー(タブバー)にあります。アクションバーの高さを判断する方法が見つかりませんでした。画面を作成する前に、画面に残っているスペースを確認してください。
だから私は仮定をしました:
- 小型で通常の画面サイズのデバイスでは、アクションバーはポートレートモードで分割されます
- 大画面サイズのデバイス(Nexus 7など)では、アクションバーもポートレートモードで分割されます
- xlarge画面サイズのデバイス(タブレット)では、アクションバーはポートレートモードで分割されません
そこで、さまざまな画面サイズを区別して、boolリソースを作成しました
<!-- 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>
コードでは、次のような値にアクセスします。
Boolean isSplit = getResources().getBoolean(R.bool.is_split_actionbar);
onCreateView()メソッドでアクションバーの高さを取得するには:
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);
アクションバーが分割されている場合は、高さを2倍にします。
if(isSplit)
actionBarHeight = actionBarHeight * 2;
これは理想的な解決策ではありませんが、私にとってはこれでうまくいきます。