Android5.0以上的状态栏透明和沉浸式模式兼容底部导航栏与界面重复

设置状态栏和导航栏透明的方式

这里提供三种方式:javascript

1,主题方式 
html

能够用于<appliction>节点下的主题,也能够根据项目需求放在相应的<活动>节点下的主题上;这种方式兼顾到Android自己状态栏对于不一样版本的适配4.4〜5.0全透明,5.0以上半透明),会根据不一样版原本适配。java


<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">true</item>
<!--Android 5.x开始须要把颜色设置透明,不然导航栏会呈现系统默认的浅灰色-->
<item name="android:statusBarColor">@android:color/transparent</item>

2,经过系统提供的标志位设置 (推荐)
这种方式和方式一一样会根据Android的自己状态栏对于不一样版原本适配




if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { 
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);//设置透明状态栏
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);//设置透明导航栏
}


3,经过给系统窗口设置颜色值  
这种方式能够避免Android自己状态栏对于不一样版本的适配,只要用这种方式设置,5.0以上也能够实现全透明。但前提要求是Build.VERSION.SDK_INT> = Build.VERSION_CODES.LOLLIPOP,只能适用于5.0以上的系统。


if (Build.VERSION.SDK_INT >= 21) {
			View decorView = getWindow().getDecorView();
			int option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN| View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
			decorView.setSystemUiVisibility(option);
//			getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);//设置透明状态栏
//			getWindow().setNavigationBarColor(Color.TRANSPARENT);//将导航栏设置为透明色
//			getWindow().setStatusBarColor(Color.TRANSPARENT);
			getWindow().setStatusBarColor(Color.parseColor("#00000000"));
		}


状态栏和顶部内容不和状态栏重复

开发中大部分需求是实现状态栏和顶部的控件是同一个颜色,同时,控件内容也不和状态栏重复。要实现这样的效果关键是在XML中给顶部控件添加上两个属性就能够了,这两个属性在我博客的Android中的XML属性中都有详细的文章。这里就很少赘述了。android


android:fitsSystemWindows="true"  
android:clipToPadding="true"