ActionBar的大小是多less像素?
我需要知道像素的ActionBar的确切大小,以便应用正确的背景图像。
要检索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.xmlselect这个属性并为其赋值。
- 步骤2中分配的值取决于不同的设备大小,这些大小在平台中的各种dimens.xml文件中定义,即, 芯/ RES / RES /值-sw600dp / dimens.xml
从Android 3.2的framework-res.apk
反编译源中, res/values/styles.xml
包含:
<style name="Theme.Holo"> <!-- ... --> <item name="actionBarSize">56.0dip</item> <!-- ... --> </style>
3.0和3.1似乎是相同的(至less从AOSP)…
要获取操作栏的实际高度,必须在运行时parsing属性actionBarSize。
TypedValue tv = new TypedValue(); context.getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true); int actionBarHeight = getResources().getDimensionPixelSize(tv.resourceId);
Honeycomb示例之一引用了?android:attr/actionBarSize
我需要在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_ 素材 。
从以前版本的支持库升级时,应该使用该值作为操作栏的高度
如果你正在使用ActionBarSherlock,你可以用它来获得高度
@dimen/abs__action_bar_default_height
@ AZ13的答案是好的,但按照Androiddevise指南 ,ActionBar应该至less有48dp的高 。
课堂总结通常是一个很好的开始。 我认为getHeight()方法应该足够了。
编辑:
如果你需要的宽度,它应该是屏幕的宽度(右?),可以像这样收集。
屏幕比例是:8.3:100
例如:如果你的屏幕是1024像素,那么84将是你的行动栏高度。
在我的Galaxy S4> 441dpi> 1080 x 1920> getResources()获取Actionbar高度getDimensionPixelSize我有144个像素。
使用公式px = dp x(dpi / 160),我使用441dpi,而我的设备在于
在类别480dpi。 所以把这个证实了结果。
我这样做是为了我自己,这个辅助方法应该派上用场:
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; }