android 沉浸式效果

来源:互联网 发布:萝卜网络加速器安卓版 编辑:程序博客网 时间:2024/05/05 00:39
public void hideSystemUI(View view) {    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {        view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE                        | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION                        | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN                        | View.SYSTEM_UI_FLAG_FULLSCREEN                        | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION                        | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY        );    }

}

//可以在activity中增加

@Overridepublic void onWindowFocusChanged(boolean hasFocus) {    super.onWindowFocusChanged(hasFocus);    if (hasFocus) {        //Immersive status bar
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
//透明导航栏
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
        CommonUtil.hideSystemUI(getWindow().getDecorView());    }}
一般这个可以实现沉浸式效果,但是在弹出dialog或者popwindow等时,View的焦点会转移,导致沉浸式效果失败
所以我们在弹出dialog和popwindow时先不给它们焦点的show,然后再进行沉浸式效果,最后再把焦点给它们。
Dialog  exp:
mDialog = new Dialog(mContext);
//先不给焦点
mDialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
mDialog.show();
hideSystemUI(mDialog.getWindow().getDecorView());
//show之后进行沉浸式再给焦点
mDialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);

popwindow exp:
PopWindow pop = new PopWindow(mContext);pop.setFocusable(false);pop.update();pop.showAtLocation(v, Gravity.CENTER, 0, 0);
//这里注意给的是popwindow的View
hideSystemUI(pop.getContentView());pop.setFocusable(true);pop.update();



0 0
原创粉丝点击