我遇到了同样的问题。在纵向模式下的手机设备上,操作栏是分开的。因此菜单项位于顶部操作栏中,选项卡位于下方的第二个操作栏(选项卡栏)中。我只是没有找到任何可能的方法来确定操作栏的高度:在构建屏幕之前查看屏幕上剩余的空间。
所以我做了一个假设:
- 在小型和正常屏幕尺寸的设备上,操作栏以纵向模式拆分
- 在大屏幕设备(如 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);
如果操作栏被拆分,则高度加倍:
if(isSplit)
actionBarHeight = actionBarHeight * 2;
这不是一个理想的解决方案,但对我来说这是可行的。