안드로이드에서 여러 개의 레이아웃이 겹치는 것을 만질 때의 행위
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이 터치될 때 하고 싶은 처리를 할 수 있다.
기본적인 일을 썼다.
이번에 나는 실제 직면한 문제에 더욱 가까운 내용으로 쓰고 싶다.
Reference
이 문제에 관하여(안드로이드에서 여러 개의 레이아웃이 겹치는 것을 만질 때의 행위), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/takutotacos/items/fbf1714f4baffb79ea37
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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;
}
});
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;
}
});
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
// RelativeLayoutがクリックされた時に行いたい処理を書く
return false;
}
Reference
이 문제에 관하여(안드로이드에서 여러 개의 레이아웃이 겹치는 것을 만질 때의 행위), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/takutotacos/items/fbf1714f4baffb79ea37텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)