TextView textView;
ViewGroup view;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (android.os.Build.VERSION.SDK_INT > 18) {
Window window = getWindow();
//设置StatusBar为透明显示,需要在setContentView之前完成操作
window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
setContentView(getResultId());
// 创建TextView用于叠加StatusBar的颜色块
textView = new TextView(this);
LinearLayout.LayoutParams lParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,getStatusHeight());//在此指定宽高
textView.setBackgroundColor(Color.parseColor("#ff6219"));//在此指定颜色
textView.setLayoutParams(lParams);
// 获得根视图并把TextView加进去。
view = (ViewGroup) getWindow().getDecorView();
view.addView(textView);
initView();
initListener();
initData();
}
在填充布局(setContentView)之前填充状态栏,安卓4.4(api19)支持
//设置窗体全屏
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
//设置窗体始终点亮
getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,
WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
//设置窗体背景模糊
getWindow().setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND,
WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
当向fragmet添加导航栏时不会发生重叠,当向activity添加导航栏时会被状态栏遮挡在下方
获取状态栏高度的两个方法:
1.通过获取到status_bar_height的资源id,在计算其高度
public int getStatusBarHeight(){
int height =0;
Int resourceId=getResources().getIdentifier(“status_bar_height”,”dimen”,”android”);
if(resourceID>0){
height=getResources().getDiensionPixelSize(resourceId);
}
return height;
}
2.通过反射
Public static int getStatusHeight(){
Int statusHeight=-1;
Try{
Class(?) clazz=Class.forName(“com.android.internal.R$dimen”);
Object object=clazz.newInstance();
Int height=Integer.parseInt(clazz.getField(“status_bar_height”).get(object).toString());
statusHeight=context.getResource().getDiensionPixelSize(height);
}catch(Exception e){
E.ppppppp();}
Return statusHeight;
}