2012-08-01 6 views
17

API 14から、このアクティビティ内のビューにこのフラグSYSTEM_UI_FLAG_HIDE_NAVIGATIONを使用して、ユーザの操作(画面タッチ)が発生するまでナビゲーションバーを非表示にします。ユーザーが画面をタップすると、バーが表示されます。SYSTEM_UI_FLAG_HIDE_NAVIGATIONを使用した場合の最初のTouchEventのリスン

私がこれをやっている活動は、ユーザーが画面に触れるときに、私のビューに上記のフラグを追加する前に、何らかのアクション(独立したアクティビティを開始)をとります。

このフラグを追加すると、システムは最初の画面タッチを傍受し、ナビゲーションバーを表示することで反応します。私のビューやアクティビティがTouchEventを受け取っているのは、2回目のタッチまでではありません。

このnav hideフラグを使用するときにダブルタップする必要はなく、最初に画面に触れたときに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; 
} 

注:私が最初にタッチすると表示されてからナビゲーションバーを阻止しようとしているわけではない、私はちょうどそのイベントが発生したときにも、他のいくつかの行動を取るしたいと思います。

+7

['View.OnSystemUiVisibilityChangeListener'](http://developer.android.com/reference/android/view/View.OnSystemUiVisibilityChangeListener.html)を試しましたか? –

+0

@JoshLee私はしていないし、それは動作します!どうもありがとう。私がそれを受け入れることができるようにしたい場合は、答えとして投稿してください。 – FoamyGuy

答えて

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であり、私のレイアウトの唯一のビューでした。

関連する問題