2014-01-09 3 views
22

저는 RelativeLayout입니다.이 레이아웃에는 거의 10 개의 뷰가 있습니다.ViewGroup을 확장하지 않고 인터셉트 터치 이벤트를 처리합니다.

이 레이아웃에 OnTouchListener을 설정하고 일부 작업을 수행하고 true을 반환했습니다.

보기가없는 레이아웃 (빈 영역에 의미)을 터치하면이 수신기가 잘 작동합니다. 이 레이아웃의 자식 뷰를 터치하면이 리스너가 실행되지 않습니다 ...

ViewGroup을 확장하여 (여기 RelativeLayout)을 오버라이드 할 수 있고 자식 뷰가 사용하기 전에 터치 이벤트를 처리 할 수 ​​있음을 이해했습니다. 이 이벤트 ...

이 트릭을 할 것이지만, RelativeLayout을 내 CustomRelativeLayout으로 대체하여이 기능이 필요한 많은 xml 파일을 수정해야합니다.

그래서 제 질문은 :

RelativeLayout 이벤트를 소비의 아이 뷰 전에 (뷰 그룹 당연히) RelativeLayout에 대한 터치 이벤트를 처리 할 수있는 방법은 무엇입니까? 나는

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    // TODO Auto-generated method stub 
    return super.onTouchEvent(event); 
} 
+0

등의 방법이 없습니다. RelativeLayout을 확장해야합니다. – pskink

답변

0

을 원하지 않는 Activity입니다. 이 메서드는 터치 이벤트를 처리하는 첫 번째 메서드입니다. 는하지만이 경우에 당신은 당신은 단순히 XML에서 설정할 수있는 전망

+0

답변 해 주셔서 감사합니다 ... 질문하기 전에 두 가지 방법을 시도했지만 작동하지 않습니다 .--( – RuntimeException

+0

mayby ​​onTouchListener를 확장하여 설정하십시오. 레이아웃 – kris14an

+0

의 모든보기에 이것은 일을 할 수 있지만 거의 12 개의 활동에 많은 코드를 작성해야합니다 ... – RuntimeException

18

시도가

@Override 
public boolean dispatchTouchEvent(MotionEvent ev) { 
    return super.dispatchTouchEvent(ev); 
} 

재정의 활동에서

RelativeLayout rl = (RelativeLayout) findViewById(R.id.relativeLauout); 
    rl.setOnTouchListener(new OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      // do something 
      return false; 
     } 
    }); 

또는 사용 방법 onTouchEvent를 RelativeLayout의 할 onTouchListener를 추가보십시오 ... RelativeLayout을 확장 할

+0

당신은 내 오후 남자를 만들었습니다, 고마워요;) – Hugo

-2

의 현재 좌표와 함께 작동해야합니다 ACTION_DOWN 이벤트를 처리 할 때

android:clickable="true" 
+0

나는 성공없이 이것을 위해 RelativeLayout을 시도했습니다. – Matt

0

시도가 아이 뷰의 onTouchEvent() 방법에 false를 반환 할 수 있습니다. 따라서 포워딩 터치 이벤트는 자식 뷰, 즉 소비되지 않은 이벤트로 전송되지 않습니다.

1

이상적인 것은 아니지만 동적 인 콘텐츠가없는 작은 레이아웃의 경우에도 효과적입니다.

xml에서 레이아웃의 ViewGroup (중첩 된 ViewGroups 및 해당 하위 포함)의 모든 자손에 android:clickable="false"을 설정합니다. 클릭 한 각 자식은 클릭을 부모에게 전달하여 결국 ViewGroup의 기본 터치 핸들러로 이동합니다. 클릭 이벤트를 얻으려는 루트 ViewGroup을 설정해야합니다. viewgroup.setClickable(true)

보기를 동적으로 추가하는 경우 뷰 계층 구조에 추가하기 전에 view.setClickable(false);을 호출해야합니다.

관련 문제