设置状态栏和导航栏透明的方式
这里提供三种方式:
1,主题方式
可以用于<appliction>节点下的主题,也可以根据项目需求放在相应的<活动>节点下的主题上;这种方式兼顾到Android本身状态栏对于不同版本的适配4.4〜5.0全透明,5.0以上半透明),会根据不同版本来适配。
<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);//设置透明导航栏
}
这种方式可以避免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:fitsSystemWindows="true"
android:clipToPadding="true"