3

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

在没有操作栏的情况下,如何获得父级的真实高度?

编辑:

onWindowFocusChanged我在活动的方法上阅读了父宽度和高度。

4

2 回答 2

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).
}
于 2013-04-19T18:23:06.227 回答
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,这里是您的 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是一个内部资源,所以你必须让它像这里描述的那样工作。

于 2013-04-19T18:28:01.163 回答