android actionbar 默认高度,关于android:ActionBar的大小是多少?

这篇博客主要讨论了如何在Android中获取ActionBar的高度,包括在XML和运行时的不同方法。内容涉及了不同设备尺寸和版本下的高度差异,以及如何使用TypedArray和资源属性来获取精确的尺寸值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我需要知道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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值