首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何获得ActionBar的高度?

如何获得ActionBar的高度?
EN

Stack Overflow用户
提问于 2012-09-06 21:45:03
回答 17查看 184.4K关注 0票数 205

每次创建活动(特别是为了处理ActionBar高度可能发生变化的轮换时的配置更改)时,我都会尝试获取ActionBar的高度(使用Sherlock)。

为此,我使用了ActionBar.getHeight()方法,该方法仅在显示ActionBar时有效。

当第一次创建第一个活动时,我可以在onCreateOptionsMenu回调中调用getHeight()。但此方法不是在之后调用的。

所以我的问题是什么时候我可以调用getHeight()并且确保它不会返回0?或者,如果不可能,我如何设置ActionBar的高度?

EN

回答 17

Stack Overflow用户

发布于 2014-02-18 03:54:37

在XML中,您应该使用以下属性:

代码语言:javascript
复制
android:paddingTop="?android:attr/actionBarSize"
票数 153
EN

Stack Overflow用户

发布于 2013-03-18 20:23:48

@Anthony answer适用于支持ActionBar的设备和只支持Sherlock Action Bar的设备,必须使用以下方法

代码语言:javascript
复制
    TypedValue tv = new TypedValue();
    if (getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true))
        actionBarHeight = TypedValue.complexToDimensionPixelSize(tv.data,getResources().getDisplayMetrics());

    if(actionBarHeight ==0 && getTheme().resolveAttribute(com.actionbarsherlock.R.attr.actionBarSize, tv, true)){
            actionBarHeight = TypedValue.complexToDimensionPixelSize(tv.data,getResources().getDisplayMetrics());
    }

   //OR as stated by @Marina.Eariel
   TypedValue tv = new TypedValue();
   if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.HONEYCOMB){
      if (getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true))
        actionBarHeight = TypedValue.complexToDimensionPixelSize(tv.data,getResources().getDisplayMetrics());
   }else if(getTheme().resolveAttribute(com.actionbarsherlock.R.attr.actionBarSize, tv, true){
        actionBarHeight = TypedValue.complexToDimensionPixelSize(tv.data,getResources().getDisplayMetrics());
   }
票数 16
EN

Stack Overflow用户

发布于 2013-08-25 17:59:12

我认为最安全的方法是:

代码语言:javascript
复制
private int getActionBarHeight() {
    int actionBarHeight = getSupportActionBar().getHeight();
    if (actionBarHeight != 0)
        return actionBarHeight;
    final TypedValue tv = new TypedValue();
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        if (getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true))
            actionBarHeight = TypedValue.complexToDimensionPixelSize(tv.data, getResources().getDisplayMetrics());
    } else if (getTheme().resolveAttribute(com.actionbarsherlock.R.attr.actionBarSize, tv, true))
        actionBarHeight = TypedValue.complexToDimensionPixelSize(tv.data, getResources().getDisplayMetrics());
    return actionBarHeight;
}
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12301510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档