布局就是一个EditText用来测试,点击后监听显示方法getWindow().getDecorView().setOnSystemUiVisibilityChangeListener(this);
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.view.WindowManager;
public class MainActivity extends AppCompatActivity implements View.OnSystemUiVisibilityChangeListener {
private Handler mHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
// 保持屏幕常亮
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
// 开启沉浸式
getWindow().getDecorView().setOnSystemUiVisibilityChangeListener(this);
startImmerse(this);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mHandler = new Handler();
}
private void startImmerse(MainActivity mainActivity) {
mainActivity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar
| View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar
| View.SYSTEM_UI_FLAG_IMMERSIVE);
}
@Override
public void onSystemUiVisibilityChange(int visibility) {
Log.d("immerse", "onSystemUiVisibilityChange: " + visibility);
if (visibility == 0) {
mHandler.removeCallbacks(enterImmerseMode);
mHandler.postDelayed(enterImmerseMode, 1000);
}
}
private Runnable enterImmerseMode = new Runnable() {
@Override
public void run() {
startImmerse(MainActivity.this);
}
};
}
在看看PopupWindow和 Dialog的沉浸
在需要弹出PopupWindow的地方调用showPopupWindow();第一个参数是view,第二个是ListView
public void showPopupWindow(View anchor,ListView mlistView) {
if (mlistView!=null){
mPopupWindow = new PopupWindow(mlistView, anchor.getWidth(), DensityUtil.px2dp(800));
mPopupWindow.setFocusable(false);
mPopupWindow.setBackgroundDrawable(new ColorDrawable());
mPopupWindow.setOutsideTouchable(true);
mPopupWindow.setFocusable(false);
mPopupWindow.update();
PopupWindowCompat.showAsDropDown(mPopupWindow,anchor, 0, -anchor.getHeight() , Gravity.CENTER);
fullScreenImmersive(mPopupWindow.getContentView());
mPopupWindow.setFocusable(true);
mPopupWindow.update();
}
}
public void fullScreenImmersive(View view) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
int uiOptions = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_FULLSCREEN;
view.setSystemUiVisibility(uiOptions);
}
}
Dialog的沉浸
AlertDialog.Builder builder = new AlertDialog.Builder(ContextUtil.getCurrentActivity());
builder.setMessage("");
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
mDialog1.dismiss();
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
mDialog1.dismiss();
}
});
mDialog = builder.create();
//显示
Utils.showDialog(mDialog);
工具类里面的一个方法showDialog();
public static void showDialog(Dialog dialog) {
Activity activity = ContextUtil.getCurrentActivity();
if (activity != null) {
//Set the dialog to not focusable (makes navigation ignore us adding the window)
dialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
dialog.show();
//Set the dialog to immersive
dialog.getWindow().getDecorView().setSystemUiVisibility(activity.getWindow().getDecorView().getSystemUiVisibility());
//Clear the not focusable flag from the window
dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
}
}