ActionBar的大小(以像素为单位)是多少?

Eug*_*ene 254 android android-actionbar

我需要知道ActionBar的确切大小(以像素为单位),以便应用正确的背景图像.

AZ1*_*Z13 542

要在XML中检索ActionBar的高度,只需使用

?android:attr/actionBarSize
Run Code Online (Sandbox Code Playgroud)

或者如果您是ActionBarSherlock或AppCompat用户,请使用此选项

?attr/actionBarSize
Run Code Online (Sandbox Code Playgroud)

如果在运行时需要此值,请使用此值

final TypedArray styledAttributes = getContext().getTheme().obtainStyledAttributes(
                    new int[] { android.R.attr.actionBarSize });
mActionBarSize = (int) styledAttributes.getDimension(0, 0);
styledAttributes.recycle();
Run Code Online (Sandbox Code Playgroud)

如果您需要了解定义的位置:

  1. 属性名称本身在平台的/res/values/attrs.xml中定义
  2. 平台的themes.xml选择此属性并为其分配值.
  3. 步骤2中分配的值取决于不同的设备大小,这些大小在平台中的各种dimens.xml文件中定义,即.芯/ RES/RES /值-sw600dp/dimens.xml

  • 很好的答案.我知道挖掘这些信息的方法,但搜索这个答案要快得多.你的答案也是如何搜索这些东西的一个很好的暗示. (7认同)
  • @ AZ13我想补充说,"android.R.attr.actionBarSize"将在3.0之前的设备上解析为0.所以当使用`ActionBarCompat`时,人们会坚持使用`android.support.v7.appcompat.R.attr.actionBarSize`. (4认同)

Jak*_*ton 55

从Android 3.2的解压缩源framework-res.apk,res/values/styles.xml包含:

<style name="Theme.Holo">
    <!-- ... -->
    <item name="actionBarSize">56.0dip</item>
    <!-- ... -->
</style>
Run Code Online (Sandbox Code Playgroud)

3.0和3.1似乎是相同的(至少来自AOSP)......

  • 在4.0+:默认为48dp,landscape为40dp,sw600dp为56dp (85认同)
  • 这就是你应该使用android:attr值而不是硬编码值的原因! (17认同)

Dav*_*oho 43

要获取Actionbar的实际高度,您必须actionBarSize在运行时解析该属性.

TypedValue tv = new TypedValue();
context.getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true);
int actionBarHeight = getResources().getDimensionPixelSize(tv.resourceId);
Run Code Online (Sandbox Code Playgroud)


Vik*_*rla 33

其中一个蜂窝样品指的是 ?android:attr/actionBarSize

  • ABS有`?attr/actionBarSize`(注意缺少android命名空间),适用于所有API级别. (9认同)
  • 是的,在这里解释:http://developer.android.com/guide/topics/ui/actionbar.html#GeneralStyles (3认同)
  • 这是你的min sdk> = 11的答案,如果你的min是<11,那么很可能你正在使用ABS,那么这就是解决方案:@ dimen/abs__action_bar_default_height (3认同)

Man*_*ser 21

我需要在pre-ICS兼容性应用程序中正确复制这些高度并挖掘到框架核心源.以上两个答案都是正确的.

它基本上归结为使用限定符.高度由维度"action_bar_default_height"定义

它默认定义为48dip.但是对于-land来说它是40dip而对于sw600dp它是56dip.


fla*_*rix 17

如果您使用的是最近的v7 appcompat支持包中的兼容性ActionBar,则可以使用高度获取高度

@dimen/abc_action_bar_default_height
Run Code Online (Sandbox Code Playgroud)

文档


MrM*_*fen 16

使用新的v7支持库(21.0.0),名称R.dimen已更改为@ dimen/abc_action_bar_default_height_ material.

从早期版本的支持库升级时,您应该使用该值作为操作栏的高度


Jes*_*erB 9

如果您使用的是ActionBarSherlock,则可以获得高度

@dimen/abs__action_bar_default_height
Run Code Online (Sandbox Code Playgroud)

  • @JakeWharton请告诉我们如何正确地做到这一点. (2认同)

aar*_*ell 5

@AZ13 的回答很好,但根据Android 设计指南,ActionBar 的高度至少应为48dp