1.设置状态栏的颜色
protected void setStatusColor(int color){ if(Build.VERSION.SDK_INT >=Build.VERSION_CODES.LOLLIPOP) {//5.0 全透明实现 Window window = getWindow(); 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); } else {//4.4 全透明状态栏 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); if (color != Color.TRANSPARENT){ ViewGroup decorViewGroup = (ViewGroup) getWindow().getDecorView(); View statusBarView = new View(getWindow().getContext()); int statusBarHeight = getStatusBarHeight( getWindow().getContext()); FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, statusBarHeight); params.gravity = Gravity.TOP; statusBarView.setLayoutParams(params); statusBarView.setBackgroundColor(color); decorViewGroup.addView(statusBarView); } }}复制代码
2.一些透明状态栏目的效果
1中实现了透明效果之后,在activity中用根布局:setSystemUiVisibility(int visibility)参数:visibility 1. View.SYSTEM_UI_FLAG_VISIBLE:显示状态栏,Activity不全屏显示(恢复到有状态栏的正常情况) 2. View.INVISIBLE:隐藏状态栏,同时Activity会伸展全屏显示 3. View.SYSTEM_UI_FLAG_FULLSCREEN:Activity全屏显示,且状态栏被隐藏覆盖掉 4. View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN:Activity全屏显示,但状态栏不会被隐藏覆盖,状态栏依然可见,Activity顶端布局部分会被状态遮住。 5. View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION:效果同View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 6. View.SYSTEM_UI_LAYOUT_FLAGS:效果同View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 7. View.SYSTEM_UI_FLAG_HIDE_NAVIGATION:隐藏虚拟按键(导航栏)。有些手机会用虚拟按键来代替物理按键。 8. View.SYSTEM_UI_FLAG_LOW_PROFILE:状态栏显示处于低能显示状态(low profile模式),状态栏上一些图标显示会被隐藏复制代码
3 如果按照上面设置了,没有实现相应的效果,注意看AndroidManifest.xml文件activity的theme是不是冲突了