状态栏:手机信号、电量的顶部横栏
导航栏:返回按钮、home按钮的底部区域
1.在activity的oncreate方法中添加如下代码:
//当系统版本为4.4或者4.4以上时可以使用沉浸式状态栏 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { //透明状态栏 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); //透明导航栏 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); }
2.但是这样页面的顶部内容会上浮到状态栏,如果页面的内容很长,底部的内容会下沉到导航栏,这样是不符合需求的,需要如下设置
让application的android:theme="@style/AppTheme"中,apptheme拥有如下属性<item name="android:fitsSystemWindows">true</item>如此,即可实现沉浸式的状态栏和导航栏。更好的方法是:1.创建一个类:public class ZLSStatusBar { public static void adjust(Activity activity) { int COLOR_DEFAULT = activity.getResources().getColor(R.color.blueAsTitleBar); //当前手机版本为5.0及以上 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){ activity.getWindow().setStatusBarColor(COLOR_DEFAULT); }else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { // 设置状态栏透明 activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); // 生成一个状态栏大小的矩形 View statusView = createStatusView(activity, activity.getResources().getColor(R.color.blueAsTitleBar)); // 添加 statusView 到布局中 ViewGroup decorView = (ViewGroup) activity.getWindow().getDecorView(); decorView.addView(statusView); // 设置根布局的参数 ViewGroup rootView = (ViewGroup) ((ViewGroup) activity.findViewById(android.R.id.content)).getChildAt(0); rootView.setFitsSystemWindows(true); rootView.setClipToPadding(true); } } private static View createStatusView(Activity activity, int color) { // 获得状态栏高度 int resourceId = activity.getResources().getIdentifier("status_bar_height", "dimen", "android"); int statusBarHeight = activity.getResources().getDimensionPixelSize(resourceId); // 绘制一个和状态栏一样高的矩形 View statusView = new View(activity); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, statusBarHeight); statusView.setLayoutParams(params); statusView.setBackgroundColor(color); return statusView; } }
2.在activity的setcontentview之后调用ZLSStatusBar.adjust(this);