系统状态栏、导航栏透明化
1.在需要将系统状态栏透明化的活动中添加如下代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//系统状态栏透明化需要Android 5.0以上系统支持
if (Build.VERSION.SDK_INT >= 21) {
//获取当前活动的DecorView
View decorView = getWindow().getDecorView();
//setSystemUiVisibility()方法用于改变系统UI显示
//传参 View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LAYOUT_STABLE 表示活动的布局会显示在状态栏上面
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
//将状态栏设置成透明色
getWindow().setStatusBarColor(Color.TRANSPARENT);
}
setContentView(R.layout.activity_main);
......
}
2.然后将布局文件中有文本存在的顶部控件设置如下属性
android:fitsSystemWindows="true"
这是为了给系统状态栏留下空间,避免遮挡。
3.如果还需要将导航栏也透明化,只需要在上述的decorView.setSystemUiVisibility()传参中多添加一个FLAG即可
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (Build.VERSION.SDK_INT >= 21) {
View decorView = getWindow().getDecorView();
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
getWindow().setStatusBarColor(Color.TRANSPARENT);
//将导航栏设置成透明色
getWindow().setNavigationBarColor(Color.TRANSPARENT);
}
setContentView(R.layout.activity_main);
......
}
当然别忘了设置导航栏为透明色。
有关沉浸式状态栏的补充
如果想使用沉浸式状态栏和导航栏效果,只需要在Activity中重写onWindowFocusChanged()方法即可
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (hasFocus && Build.VERSION.SDK_INT >= 19) {
View decorView = getWindow().getDecorView();
decorView.setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
}
}