- 首先要明确一下Android窗口的感念:
系统级窗口:手机屏幕所有可见部分,我们常说的状态栏和导航栏都是系统级的窗口内容;
应用级窗口:Android中的Activity所展示的部分,一般不包含状态栏和导航栏;
1.设置window占满全屏&背景透明:
// Theme设置
<!--window占满全屏-->
<item name="android:windowFullscreen">true</item>
<!--window设置背景-->
<item name="android:windowBackground">@color/transparent</item>
2.设置状态栏和导航栏透明:
// Theme设置
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:navigationBarColor">@android:color/transparent</item>
或
// 代码设置
getWindow().setStatusBarColor(Color.TRANSPARENT);
getWindow().setNavigationBarColor(Color.TRANSPARENT);
- 此时状态栏和导航栏透明,可见状态栏和导航栏区域背景为桌面背景
- 接下来需要将页面内容延伸到状态栏和导航栏
3.设置页面内容延伸到系统状态栏和导航栏:
// Theme设置
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">true</item>
或
// 代码设置
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
4.设置系统自动为视图添加一个状态栏/导航栏高度的padding:
rootView.setFitsSystemWindows(true);
//或者xml view标签加入
android:fitsSystemWindows="true"
以上只是内容延伸到状态栏和导航栏,如需全屏展示(例如:启动页)请参见Google官方启用全屏模式:https://developer.android.com/training/system-ui/immersive?hl=zh-cn