安卓:分割ActionBar的实际父视图高度

3
我使用操作栏(原始的Android,而不是ABS)并将我的视图相对于根布局(RelativeLayout)定位。为了计算屏幕上的相对位置,我使用了我的视图的getParent().getHeight() / getParent().getWidth()方法。使用普通的ActionBar可以正常工作,我得到了父级的真实高度(Activity高度 - ActionBar高度,例如在800像素显示器上为690像素)。但是,如果我使用splitActionBarWhenNarrow选项并显示底部栏,则会得到相同的父高度(例如,在800像素屏幕上再次为690像素)。因此,我的一些以编程方式定位的视图位于底部操作栏下面。
如何获得没有操作栏的父级的真实高度?
编辑:
我在活动的onWindowFocusChanged方法中读取父宽度和高度。

底部栏(分割ActionBar)与主ActionBar(顶部的那个)具有相同的高度。因此,您的父级高度为高度-2 * ActionBarHeight。 - Michał Z.
1
我该如何检测操作栏是否被分割? - WebDucer
2个回答

5
顶部和底部操作栏的高度相同。据我所知,您无法通过编程请求操作栏的大小。帖子提供了一个示例,说明如何使用样式设置操作栏的高度,以使其保持一致。
要确定操作栏是否已拆分,必须手动计算。根据设计准则(接近底部)
主操作栏可以容纳多少个操作?以下规则控制操作栏的容量:
  • 主操作栏中的操作按钮不能占用超过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
而如何检测操作栏是否已分割呢? 简单。您可以使用布尔值。如果屏幕宽度小于400dp,则默认情况下会拆分ActionBar。 已经声明了一个(这是ActionBar用来确定它是手持设备还是平板电脑的)。 如果您的目标是Android HC+,则可以访问默认ActionBars值: android.R.bool.split_action_bar_is_narrow,如果您正在使用ActionBarSherlock: R.bool.abs_split_action_bar_is_narrow。 在此处找到默认ActionBar:here,在此处找到ABS:here。 现在,您可以像这样访问布尔值:
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是内部资源,因此您必须按照这里所述的方式使其正常工作。请注意,不要改变HTML标签。

1
谢谢你提供的Android布尔值链接!非常有用。 - Nick Rempel
1
这是一个很棒的解决方案! - WebDucer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接