沉浸式和变色龙的区别:

来源:互联网 发布:通辽数据恢复公司 编辑:程序博客网 时间:2024/04/29 17:35
之前把沉浸式的概念搞错了,现在通过项目里添加这个需求终于搞明白了,先区分下这几个概念:

1. 全屏状态 :默认不显示状态栏,下拉才有状态栏,并且会在几秒之后自动消失
2. 沉浸模式 :状态栏仍然一直存在,只不过背景颜色设为透明之后,布局向上填充了 。这种情况下如果在根布局中加入android:fitsSystemWindows=”true”这个配置,布局就不会向上填充,而是把布局的背景色填充到状态栏背景区域。
3. 变色龙模式 :状态栏仍然一直存在,只不过背景颜色改变了,这种情况状态栏只是颜色改变了,并不会被布局填充。
然后说下通过实验总结出来的4.4和5.0系统之前对沉浸和变色龙设置的区别:
android4.4系统:既可以设置沉浸也可以只设置状态栏颜色。只能用主题设置的方式来实现而不能用代码,作用是全局的。但是需要注意的是:4.4系统设置状态栏颜色只能用下面代码实现:

SystemBarTintManager tintManager = new SystemBarTintManager(this);            tintManager.setStatusBarTintEnabled(true);            tintManager.setStatusBarTintResource(R.color.red);```并且需要同事用代码和注意设置才能实现,并且只有在设置了沉浸式状态下才可以设置状态栏颜色成功,源码中注释如下:/** * Class to manage status and navigation bar tint effects when using KitKat  * translucent system UI modes. */public class SystemBarTintManager {。。。}android5.0系统:既可以设置沉浸也可以只设置状态栏颜色。主题设置起作用--全局,也可以在指定activity中用代码设置--局部,这两种方式对5.0都起作用,不同之处在于作用范围。下面是设置沉浸式的代码:方法一:<div class="se-preview-section-delimiter"></div>

private void initStatusBar() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = getWindow();
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);
}
}

方法二:<div class="se-preview-section-delimiter"></div>

private void initStatusBar() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
}

方法三:<div class="se-preview-section-delimiter"></div>



true

“`
上面三种方法的代码都可以保证5.0以上系统设置沉浸式状态栏,当然SystemBarTintManager 这种方法对5.0也有效,并且5.0中单独使用代码或者主题设置都可以实现。但4.4系统必须在应用中res目录下创建values-v19文件夹并新建一个style文件,然后在文件中添加主题并且同事使用SystemBarTintManager 代码并且同事设置沉浸式才能修改状态栏颜色成功。

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">        <!--状态栏透明-->        <item name="android:windowTranslucentStatus">true</item>    </style>

上面三种方法的代码都可以保证5.0以上系统设置沉浸式状态栏,当然SystemBarTintManager 这种方法对5.0也有效,并且5.0中单独使用代码或者主题设置都可以实现。但4.4系统必须在应用中res目录下创建values-v19文件夹并新建一个style文件,然后在文件中添加主题并且同事使用SystemBarTintManager 代码并且同事设置沉浸式才能修改状态栏颜色成功。

之前的总结有点乱和不清晰,看了洪阳大神的博客基本上清楚了,简单总结如下:
4.4系统可以设置状态栏透明windowTranslucentStatus:
状态栏透明之后下面布局会自动填充到状态栏,可以通过添加一个和状态栏等高的布局来填充并设置颜色。
5.0系统可以直接通过主题设置colorPrimaryDark状态栏颜色,且底部布局不会自动填充。

1 0