美文网首页
android 沉浸式状态栏5.0

android 沉浸式状态栏5.0

作者: sky黑色镰刀 | 来源:发表于2019-02-17 21:33 被阅读0次

效果图

最近因为项目 需要做一些沉浸效果.  就在网上看了不少相关的资料;

文章结尾有demo地址

1.设置状态栏颜色

public static void setStatusBarColor(Activity activity, int color) {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {View decorView = activity.getWindow().getDecorView();        int option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN                | View.SYSTEM_UI_FLAG_LAYOUT_STABLE;        if (option != decorView.getSystemUiVisibility()) {decorView.setSystemUiVisibility(option);        }if (color != activity.getWindow().getStatusBarColor()) {activity.getWindow().setStatusBarColor(color);        }}}

2.设置状态栏 文字图标颜色 (深色或浅色) ; 当背景为浅色的时候 就需要改变状态栏 颜色为深色.

public static void setAndroidNativeLightStatusBar(Activity activity, boolean dark) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { View decor = activity.getWindow().getDecorView(); if (dark) { decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); } else { decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE); } }}

3.内容根布局设置为 true 让内容不被状态栏遮挡

setFitsSystemWindows(true);

如果根布局不设置 setFitsSystemWindows(true); 就是下图这种效果

设置之后

        

Activity 沉浸代码片段

@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); //设置状态栏颜色为透明 setStatusBarColor(this, 0x00000000); setContentView(R.layout.activity_immerse); rootLayout = findViewById(R.id.rootLayout); //内容根布局设置为true 让内容不被状态栏遮挡 rootLayout.setFitsSystemWindows(true); findViewById(R.id.backButton).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); } });}

Activity +多个Fragment 沉浸

在每个Fragment 里面的根布局 加上setFitsSystemWindows(true); 你会发现只有第一个显示出来的Fragment是正常的 后面显示的内容 依旧被状态栏挡住了;  这里是因为  setFitsSystemWindows(true);内部已经被消费一次了,  后面都不会执行了; 这个时候需要通过重写 FrameLayout 让它再次执行:

Demo下载地址


相关文章

网友评论

      本文标题:android 沉浸式状态栏5.0

      本文链接:https://www.haomeiwen.com/subject/pdpneqtx.html