安卓刘海屏沉浸式(内容绘制到底部,隐藏底部导航栏,状态栏背景颜色为透明)

纯java实现(只针对比较新的版本,且没有实现字体为黑色):

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Window window = getWindow();
        // 5.0以上系统状态栏透明
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {

            window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                    | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
            window.setStatusBarColor(Color.TRANSPARENT);
        }

        //        View.SYSTEM_UI_FLAG_LAYOUT_STABLE:全屏显示时保证尺寸不变。
//        View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN:Activity全屏显示,状态栏显示在Activity页面上面。
//        View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION:效果同View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
//        View.SYSTEM_UI_FLAG_HIDE_NAVIGATION:隐藏导航栏
//        View.SYSTEM_UI_FLAG_FULLSCREEN:Activity全屏显示,且状态栏被隐藏覆盖掉。
//        View.SYSTEM_UI_FLAG_VISIBLE:Activity非全屏显示,显示状态栏和导航栏。
//        View.INVISIBLE:Activity伸展全屏显示,隐藏状态栏。
//        View.SYSTEM_UI_LAYOUT_FLAGS:效果同View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
//        View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY:必须配合View.SYSTEM_UI_FLAG_FULLSCREEN和View.SYSTEM_UI_FLAG_HIDE_NAVIGATION组合使用,达到的效果是拉出状态栏和导航栏后显示一会儿消失。

// 全屏展示
//        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
//            window.setStatusBarColor(Color.TRANSPARENT);
//        }
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                // 全屏显示,隐藏状态栏和导航栏,拉出状态栏和导航栏显示一会儿后消失。
                window.getDecorView().setSystemUiVisibility(
                        View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                               // | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                                | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                                | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                               // | View.SYSTEM_UI_FLAG_FULLSCREEN
                                | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);

            } else {
                // 全屏显示,隐藏状态栏
                window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN);
            }
        }

        setContentView(R.layout.activity_main);






    }
}

但是上面代码,启动屏打开后状态栏会闪一下,因为默认状态栏是有背景颜色的,所以最后先在style.xml里面设置透明


shortEdges
true

vivo,华为,小米的绘制到状态栏底部,androidmainifest.xml配置,实测有效

   
    
    
    
    
    

其他相关设置:https://blog.csdn.net/wwslina/article/details/88807752

国产机可能需要做的特殊设置:https://blog.csdn.net/xuehuayous/article/details/79356198

状态栏兼容:https://www.jianshu.com/p/6ebc25b9306e

你可能感兴趣的:(android,安卓,沉浸式,状态栏,导航栏,全屏)