android – 确定状态栏是在顶部还是底部?

我试图找出如何告诉状态栏的位置(顶部或底部).我试图检查HierarchyViewer但没有看到状态栏视图.

实际上,我需要弄清楚的是,给定一个上下文,一种返回布尔值的方法(如果条形图在顶部则为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
D/Menu(1007): Decor View Dimensions0 0 800 1216

我在想什么/做错了什么?

解决方法

这是唯一对我有用的方法.以下方法返回顶部状态栏的高度.因此,如果相应的返回值等于0,则窗口顶部没有状态栏.
public static int getTopStatusBarHeight(Activity activity) {
    Rect rect = new Rect();

    activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);

    return rect.top;
}

相关文章

Android 如何解决dialog弹出时无法捕捉Activity的back事件 在...
Android实现自定义带文字和图片的Button 在Android开发中经常...
Android 关于长按back键退出应用程序的实现最近在做一个Andr...
android自带的时间选择器只能精确到分,但是对于某些应用要求...