1、重写activity 的dispatchTouchEvent;
@Override public boolean dispatchTouchEvent(MotionEvent ev) { switch(ev.getAction()){ case MotionEvent.ACTION_DOWN:{ //手指下来的时候,取消之前绑定的Runnable ToastUtil.showToast("down"); hideNBarHandler.removeCallbacksAndMessages(null); break; } case MotionEvent.ACTION_UP:{ //手指离开屏幕,发送延迟消息 ,5秒后执行 ToastUtil.showToast("up"); hideNBarHandler.sendEmptyMessageDelayed(0, 1000 * 5); break; } } return super.dispatchTouchEvent(ev); }
2、实现 handler
private Handler hideNBarHandler = new Handler(){ @Override public void handleMessage(Message msg) { hideNavigationBar(); } };
3、实现隐藏方法
private void hideNavigationBar() { View decorView = getWindow().getDecorView(); int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN; decorView.setSystemUiVisibility(uiOptions); }
如果想直接干掉 NavigationBar的话: 用下面的方法
private void closeNavigationBar() { try { //需要root 权限 Build.VERSION_CODES vc = new Build.VERSION_CODES(); Build.VERSION vr = new Build.VERSION(); String ProcID = "79"; if (vr.SDK_INT >= vc.ICE_CREAM_SANDWICH) { ProcID = "42"; //ICS AND NEWER } //需要root 权限 Process proc = Runtime.getRuntime().exec(new String[]{"su", "-c", "service call activity " + ProcID + " s16 com.android.systemui"}); //WAS 79 proc.waitFor(); } catch (Exception ex) { Toast.makeText(getApplicationContext(), ex.getMessage(), Toast.LENGTH_LONG).show(); } }