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(); 

如果你需要了解这个定义在哪里:

  1. 属性名称本身是在平台的/res/values/attrs.xml中定义的
  2. 平台的themes.xmlselect这个属性并为其赋值。
  3. 步骤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; }