目錄
- 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.總結
僅自己學習記錄,如有錯誤,敬請諒解~,謝謝~~~
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/295694.html
標籤:其他
