从API 14开始,您可以在Activity中的View上使用此标志SYSTEM_UI_FLAG_HIDE_NAVIGATION
,告诉系统您要隐藏导航栏,直到有用户交互(屏幕触摸)。一旦用户点击屏幕,就会显示该栏。
我正在执行此操作的活动在用户触摸屏幕时执行一些操作(启动单独的活动),然后将上述标记添加到我的视图中,这非常有效。
添加该标志后,系统会拦截第一个屏幕触摸,并通过显示导航栏对其做出反应。直到第二次触摸,我的任何观点或我的活动才会收到TouchEvents。
有没有人知道我可以设置一个监听器的方式,让我在第一次触摸屏幕时启动第二个活动,而不是在使用此隐藏导航标志时需要双击?
我已经尝试了以下所有内容,当第一次触摸屏幕以显示导航栏时,我没有收到任何回调。
@Override
public void onUserInteraction(){
Log.i(myTag, "INTERACT");
}
@Override
public boolean onGenericMotionEvent(MotionEvent me){
Log.i(myTag, "GENERIC");
return true;
}
//I thought maybe the size change would lead to a callback here. No dice though.
@Override
public void onWindowAttributesChanged(WindowManager.LayoutParams params){
Log.i(myTag, "WINDOW CHANGE");
}
@Override
public boolean dispatchTouchEvent(MotionEvent me){
Log.i(myTag, "TOUCH");
return true;
}
注意:我没有试图阻止第一次触摸时显示导航栏,我只是想在事件发生时采取其他一些行动。
答案 0 :(得分:7)
正如Josh Lee在评论中所说,View.OnSystemUiVisibilityChangeListener是关键。
以下是我使用的代码:
mView.setOnSystemUiVisibilityChangeListener(new OnSystemUiVisibilityChangeListener() {
@Override
public void onSystemUiVisibilityChange(int vis) {
Log.i(myTag, "System UI"+ vis);
if(vis == 0){
Intent i = new Intent(MainActivity.this, AnotherActivity.class);
startActivity(i);
finish();
}
}
});
我认为mView
可以是对您的Activity中当前显示的任何视图的引用。就我而言,它是一个全屏VideoView,是我布局中唯一的视图。