2017-12-29 47 views
0

ユーザーが画面上のどこでもスワイプしたときにフィードバックを得たいと考えています。私はonTouchListenerを使用してそれを行ういくつかのコードを発見しました。そしてそれは働いた。 今日、私はUI設定でいくつかのリワークを行い、それを少し整理するためにたくさんの新しいレイアウトを追加しました。しかし、私のonTouchイベントはそれ以上のことを引き起こすことはありません!レイアウト変更後にonTouchListenerが機能しない

私の推測では、レイアウトの一部がオーバーラップしてイベントを盗んでいる可能性があります。しかし、私はxmlで次の引数を使用しようとして成功していません。

android:clickable="false" 
android:focusable="false" 
android:touchscreenBlocksFocus="false" 
android:visibility="invisible" 

これはのonCreate内で実行されるコードです:

View window = getWindow().getDecorView(); 
window.setOnTouchListener(new View.OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     System.out.println("YEY! A TOUCH EVENT!"); 
     return true; 
    } 
}); 

RelativeLayout tab1 = (RelativeLayout) findViewById(R.id.layTab1); 
tab1.setOnTouchListener(new View.OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     System.out.println("YEY! A TOUCH EVENT!"); 
     return true; 
    } 
}); 

新しいレイアウトを追加することが大幅にappriciatedされたときに変更されているかもしれないもののためとして任意のアイデア!

答えて

0

多くのトラブルシューティングの後に、問題がどのようなものかを最終的に把握しました。 マイレイアウトhierchyは以下の通りであった:

- activity_main (RelativeLayout) 
--- layTab1 (RelativeLayout) 
----- (ScrollView) 
------- layTab1View (LinearLayout) 
--------- (STUFF FOR THIS TAB) 
--- layTab2 (RelativeLayout) 
----- (ScrollView) 
------- layTab2View (LinearLayout) 
--------- (STUFF FOR THIS TAB) 

そして私はactivity_mainレイアウトからイベントをつかむしようとしていました。私はScrollViewを追加するまでうまくいきました。明らかに、ScrollViewはすべてのタッチイベントを消費します。この問題を回避するには。その時点では1つのタブのみがアクティブになっているので、の子のすべてのLinearLayoutにリスナーを追加する必要がありました。

メニューのポップアップをトリガーする複数の異なる要素が同じイベントを受信して​​いるのが少し不幸なのですが、だから可能であれば、私はこれをもっと「きれいに」解決する方法について提案を聞くのが大好きです。

0

あなたは以下のようにframe layout であなたのレイアウト設計を作成して試すことができます。この方法からtouchlistnerイベントを盗むことができない今

<FrameLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

    <View 
     android:id="@+id/view_main" 
     android:layout_height="match_parent" 
     android:layout_width="match_parent" 
     android:scaleType="matrix"/> 

//Your Layout design 

</FrameLayout> 

とコード。他のレイアウト最新デザインに.setOnTouchListner view_main作る..

findViewById(R.id.view_main).setOnTouchListener(new View.OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     System.out.println("YEY! A TOUCH EVENT!"); 
     return true; 
    } 
}); 

私はこれがあなたに役立つことを願っています。

+0

ご意見ありがとうございます。 ScrollViewについていくつかの情報を見つけ出す前に、私はそれを試してみるまでにはいかなかったのです。だから私はそれが動作するかどうかわからない。しかし、私がScrollViewsについて知ったことを考えれば、私はそれが起こりそうにないと思う。 –

関連する問題