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中增加
@Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); if (hasFocus) { //Immersive status bargetWindow().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);//先不给焦点popwindow exp:mDialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);mDialog.show();hideSystemUI(mDialog.getWindow().getDecorView());//show之后进行沉浸式再给焦点mDialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);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();
android 沉浸式效果
最新推荐文章于 2022-12-11 22:04:26 发布