确定操作栏是否拆分

时间:2012-04-11 12:00:31

标签: android android-actionbar actionbarsherlock

我有一个MapView,其动作栏由ActionBarSherlock提供支持。操作栏分开(在“窄”屏幕上)和重叠/半透明(android:windowActionBarOverlay为真)。或多或少像Google地图应用。

现在我想在地图顶部推送视图,在屏幕底部仍保持在底部操作栏上方。我的问题在于我不知道底部操作栏的高度。坦率地说,我甚至无法找到一种方法来知道它是否被绘制。 getHeight()似乎返回顶部操作栏的高度(或者它可能是两者的高度,但我仍然不知道底部操作栏是否存在。

请告诉我这些信息就在我面前!

3 个答案:

答案 0 :(得分:5)

如果您正在使用ActionBarSherlock,您可以查找布尔值abs__split_action_bar_is_narrow

只需创建一些可以执行的静态方法

return ResourcesCompat.getResources_getBoolean(context,
                            R.bool.abs__split_action_bar_is_narrow);

你需要使用ResourcesCompat(来自actionbarsherlock)类,因为3.2之前无法读取带有指标的文件夹(比如values-sw480)

答案 1 :(得分:3)

我遇到了同样的问题。在纵向模式下的电话设备上,操作栏被拆分。因此,菜单项位于顶部操作栏中,而标签位于下方的第二个操作栏(tabbar)中。我没有找到任何可能的方法来确定操作栏的高度:在构建我的屏幕之前查看屏幕上剩下的空间。

所以我做了一个假设:

  • 在小型和普通的屏幕尺寸设备上,操作栏以纵向模式分割
  • 在大型屏幕尺寸设备(如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;

这不是一个理想的解决方案,但对我来说这是有效的。

答案 2 :(得分:2)

底栏应与常规操作栏的高度相匹配。因此,使用?android:attr/actionBarSize(或在ActionBarSherlock的情况?attr/actionBarSize中)使用XML中的高度或代码中的getResources().getDimensionPixelSize(R.attr.actionBarSize)就足够了。

编辑:

呃,在第二次阅读你的问题时,似乎更关注于确定分割操作栏是否存在。

你可能想阅读这些答案以及行动吧大师亚当鲍威尔的后续评论: