17

API 14以降SYSTEM_UI_FLAG_HIDE_NAVIGATION、アクティビティ内のビューでこのフラグを使用して、ユーザーの操作(画面タッチ)が行われるまでナビゲーションバーを非表示にするようにシステムに指示できます。ユーザーが画面をタップすると、バーが表示されます。

私がこれを行っているアクティビティは、ユーザーが画面に触れたときに何らかのアクションを実行します(別のアクティビティを開始します)。その後、上記のフラグをビューに追加すると、これは完全に機能しました。

そのフラグを追加した後、システムは最初の画面タッチをインターセプトし、ナビゲーションバーを表示することでそれに反応します。ビューまたはアクティビティのいずれかがTouchEventsを受信するのは、2回目のタッチまでではありません。

この非表示ナビゲーションフラグを使用するときにダブルタップする代わりに、画面に最初に触れたときに2番目のアクティビティを起動できるリスナーを設定する方法を知っている人はいますか?

次のすべてを試しましたが、ナビゲーションバーを表示するために初めて画面に触れたときに、それらのいずれにもコールバックがありません。

@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;
}

注:最初のタッチでナビゲーションバーが表示されないようにするつもりはありません。そのイベントが発生したときに他のアクションも実行したいだけです。

4

1 に答える 1

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これは、現在アクティビティに表示されているビューへの参照である可能性があると思います。私の場合、それはフルスクリーンのVideoViewであり、私のレイアウトで唯一のビューでした。

于 2013-03-04T22:04:21.170 に答える