新手上路
直接po代码(复制的时候记得加上setBar)
先是网上很好找到的“通过设置全屏,设置状态栏透明”
/**
* 通过设置全屏,设置状态栏透明
* @param activity
*/
public static void fullScreen(Activity activity) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
//5.x开始需要把颜色设置透明,否则导航栏会呈现系统默认的浅灰色
Window window = activity.getWindow();
View decorView = window.getDecorView();
//两个 flag 要结合使用,表示让应用的主体内容占用系统状态栏的空间
int option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
decorView.setSystemUiVisibility(option);
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(Color.TRANSPARENT);
//导航栏颜色也可以正常设置
window.setNavigationBarColor(Color.TRANSPARENT);
} else {
Window window = activity.getWindow();
WindowManager.LayoutParams attributes = window.getAttributes();
int flagTranslucentStatus = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
int flagTranslucentNavigation = WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION;
attributes.flags |= flagTranslucentStatus;
// attributes.flags |= flagTranslucentNavigation;
window.setAttributes(attributes);
}
}
}
在这基础上增加几个方法
dp -> px 转换
getResources().getDisplayMetrics().density 获取的是当前手机的分辨率,再来计算高度
/**
* @param context
* @param hight 想要设置的Title高度
* @return
*/
private static int dp2px(Context context,int hight){
float scale=context.getResources().getDisplayMetrics().density;
return (int)((float) hight *scale+0.5f);
}
获取状态栏高度
获取到的单位是px
举个栗子:魅蓝 note6 是 66,小米8是 110
private static int getStateBar(Context context){
int result = 0;
int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0) {
result = context.getResources().getDimensionPixelSize(resourceId);
}
return result;
}
再重新设置高度
/**
* @param c
* @param headerLayout Title 栏
*/
private static void setBar(Context context, RelativeLayout headerLayout){
int i = getStateBar(context);
ViewGroup.LayoutParams linearParams = headerLayout.getLayoutParams();
linearParams.height = BarTool.dp2px(context)+i;
headerLayout.setLayoutParams(linearParams);
}
回过头,再修改一下设置全屏的方法
多传入两个参数
Context context,RelativeLayout relativeLayout,Boolean show
第一个是提供给其他方法的,后一个是否重设高度
举个栗子:在没有Title栏的情况下也需要全屏化
public static void fullScreen(Activity activity,RelativeLayout relativeLayout,Boolean show) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
......
} else {
......
}
if(show){
setBar(activity,relativeLayout);
}
}
调用
在onCreate()中直接调用
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
BarTool.fullScreen(this,headerLayout,true);
}
当没有title栏时,将headerLayout设为null,show设置为false
BarTool.fullScreen(this,null,false);
强行总结
比较奇怪的是,偶尔会莫名其妙的报错,所以考虑一下老老实实传值
再加一个Content参数,给setBar使用。
BarTool.fullScreen(this,this,null,false);
至此,给每个页面都用上,就完事了。