2013-03-29 30 views
3

我使用操作栏(原始android,不是ABS),并将我的视图相对放置在根布局(RelativeLayout)上。要计算屏幕上的相对位置,我使用了我的视图的getParent().getHeight()/getParent().getWidth()方法。使用正常的ActionBar它工作正常。我得到父级的真正高度(活动高度 - 动作条高度,例如800px显示器上的690px)。但是,如果我使用splitActionBarWhenNarrow选项并显示底部栏,则会获得父级的相同高度(例如,在800像素屏幕上再次显示为690像素)。因此,我的一些编程定位点位于底部的操作栏下。Android:拆分ActionBar真正父级高度

我怎样才能得到父母的真正高度,没有操作栏?

编辑:

我读活动的onWindowFocusChanged方法父宽度和高度。

+0

底部条(分割动作条)具有与主ActionBar(顶部一个)相同的高度。所以你的父母高度是高度 - 2 * ActionBarHeight。 –

+1

如何检测操作栏是否被分割? – WebDucer

回答

5

顶部和底部的操作栏都是相同的高度。据我所知,你不能以编程方式请求操作栏的大小。 This文章举例说明了如何使用样式设置动作栏高度以保持一致。

要确定操作栏是否已拆分,您必须手动计算。根据the design guidelines(靠近底部)

在主操作栏中可以容纳多少动作?动作条容量由以下规则控制:

  • 主操作栏中的操作按钮可能不会占用条宽度的50%以上。底部动作条上的动作按钮可以使用整个宽度。
  • 在密度独立像素(DP)确定,将适合在主操作栏项的数目的屏幕宽度:

  • 小于360 DP = 2个图标

  • 360-499 DP = 3个图标

  • 500-599 DP = 4个图标

  • 600 DP和较大= 5个图标

例子: table of examples

所以,你想要做这样的事情。

DisplayMetrics displayMetrics = new DisplayMetrics(); 
Display display = getWindowManager().getDefaultDisplay(); 
display.getMetrics(displayMetrics); 

float density = displayMetrics.density; 
// width in dp 
float width = (displayMetrics.widthPixels/density); 

// I will assume you have 3 action bar icons 

if (width < 360) { 
    // 2 menu items fit. 
    // Calculate action bar height with 2*(actionbar height) 
    // to accommodate the bottom action bar. 

} else { 
    // 3+ menu items fit 
    // Calculate action bar height with 1*(actionbar height). 
} 
3

以及我如何检测羯羊动作栏splited与否?

简单。你使用布尔值。默认情况下,如果屏幕宽度小于400dp,则会有一个拆分的ActionBar。 已经有一个声明(这是ActionBar用来确定它是手机设备还是平板电脑的)。 如果您的目标是Android HC +,那么您可以访问默认的ActionBars值: android.R.bool.split_action_bar_is_narrow,如果您使用的是ActionBarSherlock: R.bool.abs_split_action_bar_is_narrow。 找到here为默认的ActionBar,here您的ABS。

现在你可以这样访问布尔值:

boolean isActionBarSplitted = getResources().getBoolean(R.bool.split_action_bar); 
if(isActionBarSplitted){ 
     // Parent height - SplitActionBar height 
} 
else{ 
    // No Split ActionBar 
} 

请记住,这是android.R.bool.split_action_bar_is_narrow内部资源,所以你必须得到它像描述here工作。

+1

感谢那个链接到android布尔值!非常好知道。 –

+1

这是很棒的解决方案! – WebDucer