Android:拆分ActionBar真正的父级高度

Web*_*cer 3 android relativelayout android-actionbar

我使用动作栏(原点android,而不是ABS)并将我的视图相对定位在根布局(RelativeLayout)上.为了计算屏幕上的相对位置,我使用了我的视图的getParent().getHeight()/ getParent().getWidth()方法.使用正常的ActionBar,它可以正常工作.我得到父母的真实高度(活动高度 - 动作栏高度,例如800px显示器上的690px).但是如果我使用该splitActionBarWhenNarrow选项并显示底栏,我得到父母的相同高度(例如,在800px屏幕上再次为690px).因此,我的一些以编程方式定位的视图位于底部操作栏下方.

如果没有动作条,我怎样才能获得父级的真实高度?

编辑:

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

Nic*_*pel 5

顶部和底部操作栏的高度相同.据我所知,您不能以编程方式请求操作栏的大小. 这篇文章给出了一个如何使用样式设置操作栏高度以使其一致的示例.

要确定操作栏是否已拆分,您必须手动计算.根据设计指南(靠近底部)

主动作栏中有多少动作?操作栏容量由以下规则控制:

  • 主操作栏中的操作按钮可能不会超过条形宽度的50%.底部操作栏上的操作按钮可以使用整个宽度.
  • 与密度无关的像素(dp)中的屏幕宽度决定了适合主操作栏的项目数:

  • 小于360 dp = 2个图标

  • 360-499 dp = 3个图标

  • 500-599 dp = 4个图标

  • 600 dp和更大= 5个图标

例: 示例表

所以你想做这样的事情.

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).
}
Run Code Online (Sandbox Code Playgroud)