안드로이드에서 여러 개의 레이아웃이 겹치는 것을 만질 때의 행위

8413 단어 Android

하고 싶은 일


아래 레이아웃에서 TextView를 터치할 때 Relative Layout의 터치 처리를 사용하는 방법을 조사했습니다.
- RelativeLayout
- - LinearLayout
- - - TextView

전제 조건


클릭과 마찬가지로 레이아웃 중복 부분을 터치할 때 실행되는 처리가 맨 위의 레이아웃 처리입니다. (이번 경우는 TextView입니다.)
하지만 클릭과는 다른 점이 있다.그것은 터치한 상태에서 부모 요소의 처리 여부를 지정할 수 있다는 것이다.
클릭: 맨 위에 있는 레이아웃만 처리합니다.
터치: 부모 요소에 대한 처리 여부를 지정할 수 있습니다.

사전 요구 사항 검증


위의 내용은 네가 무슨 말을 하는지 이해하기 어렵다.웃다 웃다
나는 실제로 소스를 써서 처리 동향을 보고 싶다.
MainActivity.java
        TextView textView = (TextView) findViewById(R.id.textView);
        LinearLayout linearLayout = (LinearLayout) findViewById(R.id.linearLayout);
        RelativeLayout relativeLayout = (RelativeLayout) findViewById(R.id.relativeLayout);

        relativeLayout.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                System.out.println("RelativeLayout");
                return false;
            }
        });

        linearLayout.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                System.out.println("LinearLayout");
                return false;
            }
        });

        textView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                System.out.println("textView");
                return false;
            }
        });
화면은 이런 느낌이야.

SAMPLE001을 클릭하면 console에 표시됩니다.
textView
LinearLayout
RelativeLayout
대화 상자.
다음은 각 처리의 변경이다.return true;SAMPLE001을 클릭하면 console에 표시됩니다.
textView
만 표시됩니다.
온터치의 반환값에 따라 다음과 같은 처리 방법이 다르다는 것이다.
진짜라면 부모 원소에 처리를 맡기지 않습니다.
가짜라면 부모 원소에 처리를 맡긴다.

확인


방금 원본 파일을 아래와 같이 다시 쓰면 Relative Layout의 터치 이벤트를 실행할 수 있습니다!
MainActivity.java
        textView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                System.out.println("textView");
                RelativeLayout grandParent = (RelativeLayout) v.getParent().getParent();
                grandParent.onTouchEvent(event);
                return true;
            }
        });

별수


onTouch 이외에 부모 요소 터치 이벤트를 호출하는 방법도 있습니다.
그것은 Activity 종류의 디스패치 터치 이벤트의 오버라이드 방법입니다.
터치 활동은 아이의 포석 처리에서 시작된다.
dispatchTouchEvent는 두 가지 기능이 있는데 하나는 하위 레이아웃에 처리를 맡길지 말지를 결정하는 것이고, 다른 하나는 터치 이벤트 처리를 실행하도록 하는 것이다.
터치 사건이 발생하면.
A(상위 레이아웃)라는 dispatchTouchEvent

・ 하위 레이아웃이 있는 경우 하위 레이아웃(B)이라고 하는 디스패치 터치 이벤트.
• 하위 레이아웃이 존재하지 않으면 onTouch 이벤트를 호출합니다.
따라서, Activity 클래스의 디스패치 터치 이벤트를 닫을 때, 하위 레이아웃의 온터치 이벤트를 호출하기 전에 처리할 수 있습니다.
이 방법에서 되돌아갈 수도 있다.를 참고하십시오.
예컨대
MainActivity.java
    @Override
    public boolean dispatchTouchEvent(MotionEvent event) {
        // RelativeLayoutがクリックされた時に行いたい処理を書く
        return false;
    }
이렇게 하면 하위 레이아웃의 온터치를 호출하기 전에 RelativeLayout이 터치될 때 하고 싶은 처리를 할 수 있다.
기본적인 일을 썼다.
이번에 나는 실제 직면한 문제에 더욱 가까운 내용으로 쓰고 싶다.

좋은 웹페이지 즐겨찾기