版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cui130/article/details/84938466
一.首先来看一下实现后的效果:
例一:
例二:
二.上干货
为了有些同学需要应急,直接给出使用步骤
-
首先拷贝两个工具类到项目中:
NewStatusBarUtil
OldStatusBarUtil
分别支持4.4和4.4以上版本。
其次在BaseActivity中添加一个方法:protected void process() { // 华为,OPPO机型在StatusBarUtil.setLightStatusBar后布局被顶到状态栏上去了 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { View content = ((ViewGroup) findViewById(android.R.id.content)).getChildAt(0); if (content != null) { content.setFitsSystemWindows(true); } } }
-
在Activity中的使用:
setContentView()前调用方法:StatusBarUtil.transparencyBar(this);
在setContentView()后调用方法:
process();
在onStart()方法中调用:
@Override protected void onStart() { super.onStart(); StatusBarUtil.setStatusBarColor(this,R.color.white);//设置状态栏颜色和顶部布局背景色一致 StatusBarUtil.setStatusBarTextColor(this,true); }
在activity中的使用就完成了。
-
在fragment中使用:
首先在所在activity中同样
setContentView()前调用方法:StatusBarUtil.transparencyBar(this);
在setContentView()后调用方法:
process();
在fragment的onCreate中:
StatusBarUtil.setStatusBarColor(getActivity(),R.color.app_base_color); StatusBarUtil.setStatusBarTextColor(getActivity(),false);
在fragment的onHiddenChanged方法中:
@Override public void onHiddenChanged(boolean hidden) {//为了保证切换fragment时重置状态栏颜色 super.onHiddenChanged(hidden); if(!hidden){ StatusBarUtil.setStatusBarColor(getActivity(),R.color.app_base_color); StatusBarUtil.setStatusBarTextColor(getActivity(),false); } }
在fragment中的使用就完成了。
三.错误案例
错误例图:
错误原因:
if(Build.VERSION.SDK_INT>= Build.VERSION_CODES.KITKAT) {
//透明状态栏
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
//透明导航栏
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
}
setContentView(R.layout.activity_patient_info);
正确的应该是区分api19和21如下:
StatusBarUtil.transparencyBar(this);
setContentView(R.layout.activity_home_page);
/**
* 修改状态栏为全透明
* @param activity
*/
@TargetApi(19)
public static void transparencyBar(Activity activity){
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = activity.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);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
Window window =activity.getWindow();
window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,
WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
}
四.分析
待续