1. 程式人生 > >解決DialogFragment在全屏時View被狀態列遮住的問題

解決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相關部落格:我的部落格地址