Android 全屏介面切換到非全屏介面的問題
阿新 • • 發佈:2019-02-15
App一般都有一個啟動介面,稱為Splash介面。
一般這個介面都是做成全屏的,即隱藏掉系統狀態列,然後再跳轉到主介面。
由於主介面是非全屏的,保留著狀態列,這個過程就發生了從全屏介面切換到非全屏介面。
但是在頁面切換過程中,會出現先顯示頁面內容,然後由於狀態列的出現,整個介面下移一個狀態列高度的問題。
如下圖所示:
當前的網易新聞客戶端在5.0的裝置上也會出現這樣的情況,如下圖所示:
可以看到很明顯的介面下移,特別是這種加了介面滑動切換動畫的。
解決方法:
Google之後,找到下面這個連結:
Switching from Full Screen to Non Full Screen Smoothly in Android
然而當在切換之後的activity是繼承自AppCompatActivity 或者 ActionBarActivity時是有bug的,ActionBar會上移到狀態列,後來研究了一下,給出我自己的解決方案。
主要的程式碼如下:
private void smoothSwitchScreen() {
// 5.0以上修復了此bug
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
ViewGroup rootView = ((ViewGroup) this.findViewById(android.R.id.content));
int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
int statusBarHeight = getResources().getDimensionPixelSize(resourceId);
rootView.setPadding(0, statusBarHeight, 0, 0);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
}
}
程式碼不多,也很好理解,先獲取到狀態列的高度,然後設定根佈局的padding,再設定視窗FLAG_LAYOUT_IN_SCREEN
和FLAG_LAYOUT_NO_LIMITS
屬性。
該方法在切換之後的那個activity的setContentView()
方法之前呼叫,就可以解決全屏切換到非全屏的問題。(必須在此之前)
處理後的效果如下所示:
該程式的程式碼我上傳在github上,可以前去下載檢視。
演示demo Github傳送門