使用 SYSTEM_UI_FLAG_HIDE_NAVIGATION 时监听第一个 TouchEvent

Posted

技术标签:

【中文标题】使用 SYSTEM_UI_FLAG_HIDE_NAVIGATION 时监听第一个 TouchEvent【英文标题】:Listen for first TouchEvent when using SYSTEM_UI_FLAG_HIDE_NAVIGATION 【发布时间】:2012-07-30 12:42:48 【问题描述】:

从 API 14 开始,您可以在 Activity 中的视图上使用此标志 SYSTEM_UI_FLAG_HIDE_NAVIGATION 来告诉系统您要隐藏导航栏,直到有用户交互(屏幕触摸)。一旦用户点击屏幕,就会显示该栏。

当用户触摸屏幕时,我正在执行此操作的 Activity 会执行一些操作(启动单独的 Activity),然后将上述标志添加到我的视图中,这非常有效。

添加该标志后,系统会拦截第一次屏幕触摸并通过显示导航栏对其做出反应。直到第二次触摸,我的任何 View 或我的 Activity 才收到 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;

注意:我并不是要阻止在第一次触摸时显示导航栏,我只是想在该事件发生时还采取一些其他措施。

【问题讨论】:

你试过View.OnSystemUiVisibilityChangeListener吗? @JoshLee 我没有,这确实有效!非常感谢。如果您愿意,请将其发布为答案,以便我接受。 【参考方案1】:

正如 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 可能是对当前在您的活动中显示的任何视图的引用。在我的例子中,它是一个全屏 VideoView,并且是我布局中的唯一视图。

【讨论】:

以上是关于使用 SYSTEM_UI_FLAG_HIDE_NAVIGATION 时监听第一个 TouchEvent的主要内容,如果未能解决你的问题,请参考以下文章

在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?

今目标使用教程 今目标任务使用篇

Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)

MySQL db 在按日期排序时使用“使用位置;使用临时;使用文件排序”

使用“使用严格”作为“使用强”的备份

Kettle java脚本组件的使用说明(简单使用升级使用)