2017-12-29 13 views
0

사용자가 화면의 아무 곳에서나 스 와이프 할 때 피드백을 받고 싶습니다. onTouchListener를 사용하여 코드를 찾았습니다. 그리고 효과가있었습니다. 오늘은 UI 설정에 대해 약간의 재 작업을했고 새로운 레이아웃을 많이 추가하여 조금 더 멋지게 정리했습니다. 하지만 내 onTouch 이벤트는 더 이상 실행되지 않습니다!레이아웃 변경 후 onTouchListener가 작동하지 않습니다.

내 생각 엔 일부 레이아웃이 겹쳐져 이벤트를 훔칠 수도 있습니다. 하지만 XML에서 다음 인수를 사용하려고 시도했지만 성공하지 못했습니다.

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

이에서 onCreate에서 실행되는 코드입니다 : 크게 appriciated되는 새로운 레이아웃을 추가 할 때이 변경 될 수 있습니다 무엇에 대한 같은

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

어떤 아이디어!

답변

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은 모든 터치 이벤트를 사용합니다. 이 문제를 해결하려면. 그 중 하나의 탭만 활성화되기 때문에 의 모든 자식 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에 관해 내가 발견 한 것을 생각해 볼 때 나는 그것이 거의 없다고 생각한다. –

관련 문제