Android学习笔记之系统状态栏、导航栏透明化

系统状态栏、导航栏透明化 

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);
    }
}

你可能感兴趣的:(Android)