2012-04-11 80 views
9

我有一个MapView,动作栏由ActionBarSherlock提供动力。操作栏是分开的(在“窄”屏幕上)和覆盖/半透明(android:windowActionBarOverlay为true)。或多或少像谷歌地图应用程序。确定动作栏是否被拆分

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

请告诉我这些信息是否正确我的眼前!

回答

2

底栏应符合正规操作栏的高度。因此,使用?android:attr/actionBarSize(或ActionBarSherlock的情况下?attr/actionBarSize),用于在代码中XML或getResources().getDimensionPixelSize(R.attr.actionBarSize)高度应该足够了。

编辑:

呃,在你的问题的第二次阅读,它似乎更侧重于也确定是否存在拆分操作栏。

您可能需要阅读这些答案和亚当·鲍威尔,行动起来吧大师的后续评论:

+0

是的,我也需要知道它是否存在。无论如何,我被告知(通过罗马我认为)在Android办公时间,这根本是不可能的。至少不是简单而直接的方式。因此,我们现在正在尝试使用单个顶级操作栏,并使用常规视图模仿底部操作栏。这不仅解决了这个问题,还解决了另一个问题,我们希望将某些操作“强制”到顶级操作栏。 – pakerfeldt 2012-04-18 11:29:24

3

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

所以我做了一个假设:

  • 小和正常屏幕尺寸设备的动作条在肖像模式分为大屏幕尺寸设备(如Nexus 7)的动作条也被分割在纵向模式
  • 上XLARGE屏幕尺寸的装置(片剂)的动作条未在纵向模式分割

所以我区分不同screensizes和创建一个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; 

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

+0

解决方案的最接近答案。 – 2013-01-29 16:58:24

+2

在我看来,这个假设是基于一个错误的前提:我的操作栏在Nexus 4上拆分,但不在Nexus 7上。 – 2013-02-20 15:04:33

+0

它在Nexus 7 API 25 Android Studio仿真器上也没有拆分。 – isabsent 2017-09-09 07:01:10

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)

+0

这仍然在API 3.1 +?即如果ActionBarSherlock实际上是使用本机操作栏? – 2013-01-29 16:58:06

+0

@CarlosP是的,它工作在Galaxy Nexus 4.2.2上 – 2013-03-07 17:49:43

+0

感谢您报告回来,感谢它 - 希望能够帮助其他用户。 – 2013-03-07 17:53:00