0

現在、ボタンにOnTouchListenerがあり、正常に動作します。コードは以下の通りである:アクティビティのOnTouchListener

Button button1 =(Button) findViewById(R.id.btOk1); 
    button1.setOnTouchListener(new OnTouchListener() { 
     public boolean onTouch(View v, MotionEvent event) { 
      //do some stuff here 
      return false; 
     } 
    }); 

ユーザーが私の活動の任意の領域をタップするたびに、私はいくつかのものを行うように私は、代わりに私の全体の活動にOnTouchListenerを持つことを望みます。私のアクティビティのルートレイアウトはTableLayoutです。これはどうすればいいですか?

ありがとうございます!

編集:

私は私のルートレイアウトを命名し、次のように使用するonTouchListenerを設定することにより、それを行うために管理:

View view = findViewById(R.id.mylayout); 
    view.setOnTouchListener(new OnTouchListener() { 
     public boolean onTouch(View v, MotionEvent event) { 
      Log.d(TAG, "onTouch"); 
      if ((event.getFlags() & MotionEvent.FLAG_WINDOW_IS_OBSCURED) != 0) { 
       Log.d(TAG, "Obscured"); 
       if (event.getAction() == MotionEvent.ACTION_UP) { 
        new AlertDialog.Builder(MyActivity.this) 
         .setTitle("Alert!") 
         .setMessage("Overlay detected!") 
         .setNeutralButton("Dismiss", null) 
         .show(); 
       } 
       // Return true to prevent the button from processing the touch. 
       return true; 
      } else { 
       Log.d(TAG, "Not obscured"); 
      } 
      return false; 
     } 
    }); 

私は上のほぼ任意の場所をクリックするたびに、私は今、タッチイベントを取得していますレイアウト。私は、MotionEventのフラグをFLAG_WINDOW_IS_OBSCUREDと比較することで、タッチされた領域が実際に隠れている場合にのみ、アクティビティにタッチイベントを渡すオーバーレイを検出することもできます。また、ButtonやEditTextなどのUI要素ではonTouchListenerが呼び出されるようには見えませんが、空白の領域でのみ呼び出されます。

アクティビティの一部が隠されているかどうかを検出する方法はありますか?各UI要素ごとに別々のものを用意するのではなく、アクティビティ全体に対して単一のonTouchListener()を使用する方法はありますか?

答えて

1

ActivtyのルートレイアウトにOnTouchListenerを適用します。それは確かに問題になります。

+0

ありがとうございました。これはうまくいきましたが、ルートレイアウトにidを付ける必要がありました。もう1つの質問 - アクティビティが他のUI要素によって隠されているかどうかを調べる方法はありますか?トースト通知またはシステムアラート?私はMotionEvent.FLAG_WINDOW_IS_OBSCUREDでevent.getFlags()をテストしようとしましたが、これは隠蔽されている画面の領域でしか機能しないように見えます。 – user1118764

+0

コードを貼り付けることができますか?私はあなたを取得していません。 –

+0

元の投稿を修正しました。 – user1118764

0
this.setOnClickListener(this); 

しかし、それはSurfaceView

0

は、幅と高さ「fill_parent」との相対的なレイアウトを作成して拡張するクラスのための作業を行い、活動のために動作しない場合があります。 次に、アクティビティで相対レイアウトのonTouchListenerを作成します。

RelativeLayout relativeLayout =(RelativeLayout) findViewById(R.id.relativeLayout); 
relativeLayout.setOnTouchListener(new OnTouchListener() { 
    public boolean onTouch(View v, MotionEvent event) { 
     //do some stuff here 
     return false; 
    } 
}); 
1

あなただけつまり触れたビューに関する情報なしに、あなたは活動のdispatchTouchEventを上書きすることができ、タッチイベントが発生したことを知りたい場合。

関連する問題