在小米8等一系列圓角的手機上測試項目時,發現我的自定義dialog無法全屏了,這時我的dialog全屏的解決方案還是和網上大部分人是一樣的 但是當手機使用了圓角設計時,可能就會為了顯示效果而強制使dialog能夠完整顯示。 常規做法可能是在其周圍加上padding。但是通過我的代碼可以看到,我已經使 ...
在小米8等一系列圓角的手機上測試項目時,發現我的自定義dialog無法全屏了,這時我的dialog全屏的解決方案還是和網上大部分人是一樣的
Window window = getWindow(); if (window == null) return; window.getDecorView().setPadding(0, 0, 0, 0); window.setGravity(gravity); WindowManager.LayoutParams layoutParams = window.getAttributes(); layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; window.setAttributes(layoutParams);
但是當手機使用了圓角設計時,可能就會為了顯示效果而強制使dialog能夠完整顯示。
常規做法可能是在其周圍加上padding。但是通過我的代碼可以看到,我已經使這個DecorView的padding為0,顯示效果仍不理想。
事實上這時view已經占滿全屏,你可明顯的發現view下部有下移的痕跡。
因為我還沒有來得及深入瞭解其底層原因,只能按照我自己的猜測去嘗試。
經過對我的代碼進行分析,我猜測可能是系統強製為dialog設置了setClipBounds,於是我嘗試使用了setClipToOutline(false)來取消它的clip,發現它確實是可用的。
於是我得到了一個解決方案,在以上代碼中添加
window.getDecorView().setClipToOutline(false);