我需要知道ActionBar的确切大小(以像素为单位),以便应用正确的背景图像。
您的请求在这里:queception.com/question.php?question=109
要以XML检索ActionBar的高度,只需使用
?android:attr/actionBarSize
或者如果您是ActionBarSherlock或AppCompat用户,请使用此
?attr/actionBarSize
如果在运行时需要此值,请使用此值
final TypedArray styledAttributes = getContext().getTheme().obtainStyledAttributes(
new int[] { android.R.attr.actionBarSize });
mActionBarSize = (int) styledAttributes.getDimension(0, 0);
styledAttributes.recycle();
如果您需要了解定义的位置:
属性名称本身在平台的/res/values/attrs.xml中定义
平台的themes.xml选择该属性并为其分配值。
在步骤2中分配的值取决于不同的设备大小,这些大小在平台中的各个dimens.xml文件中定义,即。芯/ RES / RES /值-sw600dp / dimens.xml
好答案。我知道挖掘这些信息的方法,但是搜索此答案的速度要快+1。您的答案也很好地提示了如何搜索此类内容。
@Radu谢谢!我已经通过工作链接更新了我的答案。
谢谢。我试图直接使用@dimenabc_action_bar_default_height(ActionBarComapt),并且可以正常工作(在mdpi设备上)。但是尝试在三星Galaxy SIII上获得此值返回了错误的值。这是因为在横向模式下,values-xlarge(以某种方式)比values-land更可取。引用该属性的工作方式就像是一种魅力。
@ AZ13我想补充一点,android.R.attr.actionBarSize将在3.0之前的设备上解析为0大小。因此,使用ActionBarCompat时会坚持使用android.support.v7.appcompat.R.attr.actionBarSize。
那家伙以像素为单位问。我想actionBarSize返回dp值。我得到值48dp。这意味着将其转换为像素可得到xhdpi的96像素。
" android.R.attr.actionBarSize"在android 2.3版中不起作用,但" R.attr.actionBarSize"在android所有版本中均起作用。只需使用" R.attr.actionBarSize"而不是" android.R.attr.actionBarSize"等即可。
此代码示例在Android 5.1 / Nexus 7上返回74。GMail应用中的实际操作栏大小为85px(通过截屏来衡量)。
?attractionBarSize(appcompat)仅显示在android设备上,而不显示在android studio中...
当您迁移到AppCompat库的AndroidX版本时,android:attr / actionBarSize起作用。
从Android 3.2的framework-res.apk的反编译源中,res/values/styles.xml包含:
56.0dip
3.0和3.1似乎是相同的(至少从AOSP起)...
风景中动作栏的不同高度如何?
在4.0及更高版本上:默认值为48dp,横向为40dp,sw600dp为56dp
这就是为什么您应该使用android:attr值而不是硬编码值的原因!
要获取操作栏的实际高度,必须在运行时解析属性actionBarSize。
TypedValue tv = new TypedValue();
context.getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true);
int actionBarHeight = getResources().getDimensionPixelSize(tv.resourceId);
蜂窝样本之一是指?android:attr/actionBarSize
是的,在这里说明:developer.android.com/guide/topics/ui/
这是答案,如果您的最小sdk> = 11,如果您的最小sdk <11,那么很可能是您使用ABS,则这是解决方案:@ dimen / abs__action_bar_default_height
ABS具有?attractionBarSize(注意缺少android名称空间),可在所有API级别上使用。
我需要在ICS之前的兼容性应用中正确复制这些高度,并挖掘框架的核心资源。上面的两个答案都是正确的。
基本上可以归结为使用限定符。高度由尺寸" action_bar_default_height"定义
默认将其定义为48dip。但是,对于陆地,它是40dip,对于sw600dp是56dip。
如果您使用的是最新的v7 appcompat支持包中的兼容性ActionBar,则可以使用
@dimen/abc_action_bar_default_height
文档
使用新的v7支持库(21.0.0),R.dimen中的名称已更改为@ dimen / abc_action_bar_default_height_material。
因此,从早期版本的支持库升级时,应使用该值作为操作栏的高度
完善!如果有人要匹配常规的ActionBar,则肯定会击败?attractionBarSize。
如果您使用的是ActionBarSherlock,则可以使用
@dimen/abs__action_bar_default_height
不要直接使用abs__前缀的资源。
@JakeWharton请告诉我们如何正确执行操作。
创建自己的尺寸,以便您不依赖于abs_。
@ AZ13的答案很好,但是根据Android设计指南,ActionBar的高度至少应为48dp。
我以这种方式为自己做的,这种辅助方法应该对某人有用:
private static final int[] RES_IDS_ACTION_BAR_SIZE = {R.attr.actionBarSize};
/**
* Calculates the Action Bar height in pixels.
*/
public static int calculateActionBarSize(Context context) {
if (context == null) {
return 0;
}
Resources.Theme curTheme = context.getTheme();
if (curTheme == null) {
return 0;
}
TypedArray att = curTheme.obtainStyledAttributes(RES_IDS_ACTION_BAR_SIZE);
if (att == null) {
return 0;
}
float size = att.getDimension(0, 0);
att.recycle();
return (int) size;
}
在我的Galaxy S4上> 441dpi> 1080 x 1920>
使用getResources()。getDimensionPixelSize获取Actionbar的高度,我得到了144个像素。
使用公式px = dp x(dpi / 160),我使用的是441dpi,而我的设备位于
在480dpi类别中。因此,放置可以确认结果。
班级总结通常是一个很好的起点。我认为getHeight()方法就足够了。
编辑:
如果需要宽度,它应该是屏幕的宽度(对吗?),可以这样收集。
奇怪-getHeight()结果为零。
在我的开发中,我注意到它在onResume()中返回零。因此,在实际需要时调用getActionBar()。getHeight()会返回一个大于0的正值。
@tos getHeight()的规范说,它返回ActionBar的当前宽度,创建视图时该宽度可能为0