目錄
- 1.前言
- 2.Android目前SDK版本号 > API 19-Android 4.4
- 3.Android目前SDK版本号 > API 21-Android 5.0
- 4.擴充知識點
- 5.完整沉浸式主題代碼
- 6.總結
1.前言
上一章,介紹了Theme主題設定方式,實作沉浸式主題。那本文就記錄代碼實作沉浸式主題效果。
Theme設定沉浸式,傳送門連結:
(AS筆記)Android全透明沉浸式主題樣式——頂部狀态欄+底部導航欄
CSDN連結:https://blog.csdn.net/qq_39038178/article/details/119657376
沉浸式工具類,傳送門連結:
(AS筆記)Android全透明沉浸式主題樣式——工具類篇
CSDN連結:https://blog.csdn.net/qq_39038178/article/details/119847976
2.Android目前SDK版本号 > API 19-Android 4.4
(1)設定頂部狀态欄半透明
Window window = getWindow(); //擷取window對象
//若沒有指定屬性,頂部狀态欄預設淺灰色
window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
(2)設定底部狀導航欄半透明
Window window = getWindow(); //擷取window對象
//若沒有指定屬性,底部導航欄預設黑色
window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
(3)Android版本判斷,同時設定(1)和(2)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
Window window = getWindow(); //擷取window對象
//設定頂部狀态欄半透明
window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
//設定底部狀導航欄半透明
window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
}

3.Android目前SDK版本号 > API 21-Android 5.0
(1)全屏顯示+狀态欄自動隐藏:手勢下滑,顯示出來——下滑=失效,應用主體内容不占用系統狀态欄空間
Window window = getWindow();
//隐藏頂部狀态欄,下滑一次失效
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN);
(2)全屏顯示+狀态欄固定顯示:不監聽手勢——應用主體内容占用系統狀态欄空間
Window window = getWindow();
//全屏顯示+狀态欄固定
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
//固定布局,搭配View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN,屬實絕配
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
(3)隐藏頂部狀态欄:全屏顯示+狀态欄固定後,此時頂部狀态欄被占用,并且沒有指定屬性,是以會預設淺灰色
Window window = getWindow();
//頂部狀态欄透明——Android 5.0+ 的屬性
window.setStatusBarColor(Color.TRANSPARENT);
說明:已經實作沉浸式=頂部狀态欄被應用主體内容占用+實作狀态欄透明,效果如下:
(4)設定狀态欄字型顔色,隻支援Android 6.0及以上版本
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE|View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
}
(5)隐藏底部導航欄+不固定:監聽手勢——觸屏=失效
Window window = getWindow();
//隐藏底部導航欄,觸屏失效
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
(6)自動隐藏底部導航欄+固定:監聽手勢——上滑彈出=不失效
Window window = getWindow();
//隐藏底部導航欄,觸屏失效
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
//強制固定布局,實作沉浸式
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
4.擴充知識點
(1)禁用傳回鍵
/**
* 屏蔽實體傳回按鈕
* @param keyCode
* @param event
* @return
*/
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode==KeyEvent.KEYCODE_BACK){
return true;
}
return super.onKeyDown(keyCode, event);
}
(2)頂部狀态欄主題
//Android 6.0 及以上版本
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR // 内容黑色主題
|View.SYSTEM_UI_FLAG_LAYOUT_STABLE); // 内容主題跟随系統
}
(3)頂部狀态欄設定顔色
Window window = getWindow();
//開啟狀态欄着色
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
//設定狀态欄顔色
window.setStatusBarColor(getResources().getColor(R.color.colorAccent));
(4)設定不能橫屏
//設定不能橫屏
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);//設定不能橫屏
5.完整沉浸式主題代碼
/**
* 設定全屏顯示:頂部狀态欄透明+底部導航欄透明
*
* @param activity
*/
private void fullScreen(Activity activity) {
/**
* Android目前SDK版本号 > API 19-Android 4.4
*/
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
Window window = getWindow(); //擷取window對象
//設定頂部狀态欄半透明
window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
//設定底部狀導航欄半透明
window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
}
/**
* Android目前SDK版本号 > API 21-Android 5.0
*/
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = getWindow();
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS//設定頂部狀态欄半透明
| WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);//設定底部狀導航欄半透明
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
|View.SYSTEM_UI_FLAG_LAYOUT_STABLE
|View.SYSTEM_UI_FLAG_HIDE_NAVIGATION //隐藏底部導航欄
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setNavigationBarColor(Color.TRANSPARENT);//底部導航欄透明——API 21 後開飯的屬性
//頂部狀态欄透明——Android 5.0+ 的屬性
window.setStatusBarColor(Color.TRANSPARENT);
}
// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
// getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR|View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
// }
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);//設定不能橫屏
}
6.總結
僅自己學習記錄,如有錯誤,敬請諒解~,謝謝~~~