起因
由于我司近日需要通过安卓app状态栏和导航栏的自定义来实现通屏显示,相关内容在各大网站上的教程众多,其中不乏详细优质的文章,此文只是我个人的一些总结,其中代码均来自网络。
本文中效果均为追求界面通屏显示,即让页面内容延伸到状态栏和导航栏下面,哪怕与其重叠
两栏透明化的实现
先上代码:
public static void setStatusBar(double opacity,Activity activity) {
//api>21,全透明状态栏和导航栏;api>19,半透明状态栏和导航栏,opacity为0透明,0.5半透明,1不透明。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
if(opacity==0){
Window window = activity.getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(Color.TRANSPARENT);
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
}else if(opacity==0.5){
activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}else {
activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
}
}else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){
if(opacity!=1) {
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}else {
activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
}
}
public static void setNavBar(double opacity,Activity activity) {
//api>21,全透明状态栏和导航栏;api>19,半透明状态栏和导航栏
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
if(opacity==0){
Window window = activity.getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setNavigationBarColor(Color.TRANSPARENT);
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN//状态栏不会被隐藏但activity布局会扩展到状态栏所在位置
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION//导航栏不会被隐藏但activity布局会扩展到导航栏所在位置
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
window.setNavigationBarColor(Color.TRANSPARENT);
}else if(opacity==0.5){
activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
}else {
activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS