app实现状态栏和导航栏沉浸效果

状态栏:手机信号、电量的顶部横栏

导航栏:返回按钮、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">trueitem>

如此,即可实现沉浸式的状态栏和导航栏。
更好的方法是:
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);




你可能感兴趣的:(android)