Actionbarsherlock getHeight()返回0

时间:2013-03-03 23:19:15

标签: android actionbarsherlock

我正在使用Actionbarsherlock,我想在操作栏下方放置一个PopupWindow。使用showAtLocation()需要x和y偏移,因此理想情况下y偏移量将是操作栏的高度。但是当我打电话时

int abHeight = getSupportActionBar().getHeight();

它返回零。我正在使用SherlockFragmentActivity

以下是相关代码:

slidingLayout = inflater.inflate(R.layout.sliding_menu, null);
menuDrawer = MenuDrawer.attach(this, MenuDrawer.MENU_DRAG_CONTENT, Position.LEFT);
menuDrawer.setContentView(R.layout.activity_main);
menuDrawer.setMenuView(slidingLayout.findViewById(R.id.sliding_menu));

getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
int abHeight = getSupportActionBar().getHeight();

我看了一遍,找不到类似的问题/答案,所以有没有人经历过这个?感谢。

编辑:杰克的回答是正确的。为了获得该属性值,我使用了this post

3 个答案:

答案 0 :(得分:2)

您可以从actionBarSize主题属性中读取操作栏的高度。这会根据设备配置进行更改,因此请确保在创建或重新创建活动时始终阅读它。

答案 1 :(得分:2)

你的风格.XML添加:<item name="@android:attr/actionBarSize">50px</item>

然后在您的活动中添加以下代码:

 TypedArray actionbarSizeTypedArray = mContext.obtainStyledAttributes(new int[] {  android.R.attr.actionBarSize});  

        int h = (int) actionbarSizeTypedArray.getDimension(0, 0);  

这是一种,我试图通过其他方式。祝你好运!

是的!我找到一种非常简单的方法:

    TypedValue tv = new TypedValue();
    if (getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true))
    {
        int  h=TypedValue.complexToDimensionPixelSize(tv.data,getResources().getDisplayMetrics());
    }

更多信息,请查看此link

答案 2 :(得分:0)

在布局之前,您无法获得视图的高度。尝试添加ViewTreeObserver

someView.getViewTreeObserver().addGlobalLayoutListener(new OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        // Remember to remove it if you don't want it to fire every time
        someView.getViewTreeObserver().removeGlobalOnLayoutListener(this);

        int abHeight = getSupportActionBar().getHeight();
        // Use the height as desired...
    }
});

请参阅从View.getViewTreeObserver()开始的文档。