我有一个MapView
,其动作栏由ActionBarSherlock提供支持。操作栏分开(在“窄”屏幕上)和重叠/半透明(android:windowActionBarOverlay为真)。或多或少像Google地图应用。
现在我想在地图顶部推送视图,在屏幕底部仍保持在底部操作栏上方。我的问题在于我不知道底部操作栏的高度。坦率地说,我甚至无法找到一种方法来知道它是否被绘制。 getHeight()
似乎返回顶部操作栏的高度(或者它可能是两者的高度,但我仍然不知道底部操作栏是否存在。
请告诉我这些信息就在我面前!
答案 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)中。我没有找到任何可能的方法来确定操作栏的高度:在构建我的屏幕之前查看屏幕上剩下的空间。
所以我做了一个假设:
所以我区分了不同的屏幕尺寸并创建了一个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)
就足够了。
编辑:
呃,在第二次阅读你的问题时,似乎更关注于确定分割操作栏是否存在。
你可能想阅读这些答案以及行动吧大师亚当鲍威尔的后续评论: