Android:拆分ActionBar真实父级高度
我使用操作栏(origin android,而不是ABS)将我的视图相对定位在根布局上(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
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布尔值的链接!很高兴知道。这是一个很好的解决方案!