天天看點

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相關部落格:

我的部落格位址

繼續閱讀