Android开发 - 解决DialogFragment在全屏时View被状态栏遮住的问题

我的上一篇文章:设置DialogFragment全屏显示 可以设置对话框的内容全屏显示,但是存在在某些机型上顶部的View被状态栏遮住的问题。经过测试,发现了一种解决办法,在DialogFragment的onCreateView()中添加一个布局监听器:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    ...
    //此处rootView是对话框的顶层View
    rootView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            int[] location = new int[2];
            rootView.getLocationOnScreen(location);
            int y = location[1];
            if (y == 0) {
                //此处的topMarginView是被状态栏覆盖的View
                ViewGroup.MarginLayoutParams params
                        = (ViewGroup.MarginLayoutParams)topMarginView.getLayoutParams();
                params.topMargin += BarUtils.getStatusBarHeight();
                topMarginView.setLayoutParams(params);
                rootView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
            }
        }
    });
}

这种方法是通过监听对话框内容布局顶层View在屏幕中的位置来解决的,如果顶层View在屏幕中的y位置为0,则表示其已经被状态栏所遮住,然后将被遮住的View向下移动状态栏的高度即可。

这种方式显然不够优雅,如果读者能有更好的方法,欢迎留言。

本文地址,如有更多疑问,请参考我的其它Android相关博客:我的博客地址

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,136评论 25 709
  • 最近网上有件事炒的热闹,说一个小伙在电梯里劝一位老人不要吸烟,老人因此发怒而亡。事件经法院一审判定小伙有责任赔款两...
    淡淡花飞DDHF阅读 1,293评论 0 0
  • 不知何时人开始走起了捷径 让梦想变得唾手可得 其实它本就是一个努力的过程 人生的必经之路 然而当梦想不再是梦想 与...
    上官楠阅读 1,443评论 0 5
  • 昨天晚上下班后我去星巴克喝咖啡, 正准备找位置坐下的时候,看见楼梯口角落处的位置上有两个人正看桌子上有彩色图片的纸...
    应小添阅读 3,203评论 1 4
  • 当枯色被季风抛向了远方,整个大地就开始了翠绿的酝酿。先是一枝一叶,后是成线成面,不可阻挡,不可思议。这样的...
    冰夫阅读 906评论 0 0