我正在使用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。答案 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()
开始的文档。