Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:拆分ActionBar真实父级高度_Android_Android Actionbar_Android Relativelayout - Fatal编程技术网

Android:拆分ActionBar真实父级高度

Android:拆分ActionBar真实父级高度,android,android-actionbar,android-relativelayout,Android,Android Actionbar,Android Relativelayout,我使用操作栏(origin android,而不是ABS)将我的视图相对定位在根布局上(RelativeLayout)。为了计算屏幕上的相对位置,我使用了视图中的getParent().getHeight()/getParent().getWidth()方法。使用普通的ActionBar,它可以正常工作。我得到父级的真实高度(活动高度-操作栏高度,例如800px显示屏上的690px)。但如果我在箭头选项和显示底部栏时使用拆分操作栏,我会得到与父级相同的高度(例如,在800px屏幕上再次使用690

我使用操作栏(origin android,而不是ABS)将我的视图相对定位在根布局上(
RelativeLayout
)。为了计算屏幕上的相对位置,我使用了视图中的
getParent().getHeight()
/
getParent().getWidth()
方法。使用普通的ActionBar,它可以正常工作。我得到父级的真实高度(活动高度-操作栏高度,例如800px显示屏上的690px)。但如果我在箭头选项和显示底部栏时使用
拆分操作栏,我会得到与父级相同的高度(例如,在800px屏幕上再次使用690px)。因此,我的一些编程定位的VIE位于底部操作栏下

如果没有操作栏,我如何获得父对象的真实高度

编辑:


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

顶部和底部操作栏的高度相同。据我所知,您不能以编程方式请求操作栏的大小。post提供了一个示例,说明如何使用样式设置动作栏高度,使其保持一致

若要确定是否拆分了操作栏,必须手动计算。根据(底部附近)

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

  • 主操作栏中的操作按钮不得占据该栏宽度的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).
}
DisplayMetrics DisplayMetrics=新的DisplayMetrics();
Display Display=getWindowManager().getDefaultDisplay();
display.getMetrics(displayMetrics);
浮动密度=displayMetrics.density;
//dp中的宽度
浮动宽度=(displayMetrics.widthPixels/密度);
//我假设你有3个动作条图标
如果(宽度<360){
//2个菜单项适合您。
//使用2*计算动作杆高度(动作杆高度)
//以容纳底部操作栏。
}否则{
//3+菜单项适合
//使用1*(操作杆高度)计算操作杆高度。
}

如何检测动作条是否被拆分

简单。您可以使用布尔值。默认情况下,如果屏幕宽度小于400dp,您将有一个拆分操作栏。 已经声明了一个(ActionBar用来确定它是手机设备还是平板电脑)。 如果您的目标是Android HC+,则可以访问默认的ActionBars值:
android.R.bool.split\u action\u bar\u狭窄
,如果您使用的是ActionBarSherlock:
R.bool.abs\u分割\u动作\u条\u狭窄
。 找到默认的操作栏,你的腹肌

现在,您可以像这样访问布尔值:

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

请记住,
android.R.bool.split\u action\u bar\u狭窄
是一个内部资源,因此您必须使其按所述方式工作。

底部栏(split actionbar)与主操作栏(顶部的一个)具有相同的高度。因此,您的父级高度是height-2*ActionBarHeight。我如何检测操作栏是否被拆分?感谢android布尔值的链接!很高兴知道。这是一个很好的解决方案!