我想知道如何判断状态栏的位置(顶部或底部)。我尝试检查HierarchyViewer
,但没有看到状态栏视图。
根据上下文,我需要弄清楚的是一种返回boolean
的方法(如果条形图位于顶部则为true,如果条形图不在顶部则为false) - 就像它不是'在 大多数 平板电脑上)。我写了一个简单的解决方案,试图找出状态栏位于顶部或底部,但它似乎没有帮助:
private boolean isStatusBarAtTop(){
if (!(getContext() instanceof Activity)) {
return !getContext().getResources().getBoolean(R.bool.isTablet);
}
Window window = ((Activity) getContext()).getWindow();
if(window == null) {
return !getContext().getResources().getBoolean(R.bool.isTablet);
}
Activity activity = (Activity)getContext();
Rect rect = new Rect();
window.getDecorView().getWindowVisibleDisplayFrame(rect);
View ourView = window.findViewById(Window.ID_ANDROID_CONTENT);
Log.d("Menu","Window Top: "+ ourView.getTop() + ", "+ourView.getBottom()+ ", "+ourView.getLeft()+", "+ourView.getRight());
Log.d("Menu","Decor View Dimensions"+rect.flattenToString());
return ourView.getTop() != 0;
}
由于某种原因,我得到以下输出(在Nexus 7平板电脑上运行):
D/Menu(1007): Window Top: 0, 0, 0, 0
D/Menu(1007): Decor View Dimensions0 0 800 1216
我在想什么/做错什么?
答案 0 :(得分:5)
这是唯一对我有用的方法。以下方法返回顶部状态栏的高度。因此,如果相应的返回值等于0 ,则窗口顶部没有状态栏。
public static int getTopStatusBarHeight(Activity activity) {
Rect rect = new Rect();
activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);
return rect.top;
}
答案 1 :(得分:1)
确实没有办法告诉状态栏的方向/位置。解决问题的最佳方法是确保您的视图始终考虑到它。
@Override
protected boolean fitSystemWindows(Rect insets) {
RelativeLayout.LayoutParams params = ((RelativeLayout.LayoutParams)this.getLayoutParams());
int bottom = params.bottomMargin;
int left = params.leftMargin;
int right = params.rightMargin;
params.setMargins(left, insets.top, right, bottom);
return super.fitSystemWindows(insets);
}
此方法背后的方法(在ViewGroup中覆盖)是从框架接收inset
rect,然后将这些插入添加到视图填充中。
答案 2 :(得分:1)
我刚刚找到另一种方法来找出状态栏的位置。逻辑很简单,我们有两个步骤来实现这一点,第一步是,
int contentViewTop= window.findViewById(Window.ID_ANDROID_CONTENT).getTop();
runnig如果状态栏位于顶部,此代码将为您提供(标题栏+状态栏)高度,否则返回0.因此我们可以假设输出为0,状态栏位于底部,否则状态栏位于在上面。
现在状态栏位于底部或顶部,这不是我们可以获得高度的问题,
public int getStatusBarHeight()
{
int result = 0;
int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0)
{
result = getResources().getDimensionPixelSize(resourceId);
}
return result;
}
我希望这会对某人有所帮助....