Android 버튼이 On으로 설정되었습니다.TouchListener가 호출되었지만 performClick을 재정의하지 않습니다.
추가하려고 할 때onTouchListner()버튼 하나로, 그것은 나를 이해시킵니다.
버튼이 켜짐으로 설정되었습니다.TouchListener가 호출되었지만 performClick을 재정의하지 않습니다.
경고문.고칠 줄 아는 사람?

btnleftclick.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
return false;
}
});
오류:
사용자 지정 보기가 설정되었습니다.TouchListener가 호출되었지만 performClick을 재정의하지는 않습니다. TouchEvent를 재정의하거나 OnTouchListener를 사용하는 View도 performClick을 구현하지 않는 경우 클릭이 감지되면 View가 내게 필요한 작업을 제대로 처리하지 못할 수 있습니다.클릭 동작을 처리하는 논리는 이상적으로 View#performClick 일부 접근성 서비스가 performClick을 호출할 때 클릭 동작이 발생할 때 클릭합니다.
이 경고는 Android가 앱을 사용하고 있을 수 있는 시각 장애인이나 시각 장애인을 생각하도록 상기시켜 주기를 원하기 때문에 나타납니다.그것이 어떤 것인지에 대한 간단한 개요를 위해 이 비디오를 보는 것을 추천합니다.
표준 UI 보기(예:Button,TextView, 등)은 모두 접근성 서비스를 통해 시각장애인 사용자에게 적절한 피드백을 제공하도록 설정되어 있습니다.터치 이벤트를 직접 처리하려고 하면 해당 피드백을 제공하는 것을 잊어버릴 위험이 있습니다.이것이 경고의 목적입니다.
옵션 1: 사용자 정의 보기 만들기
터치 이벤트 처리는 일반적으로 사용자 지정 보기에서 수행되는 작업입니다.이 옵션을 너무 빨리 취소하지 마십시오.그렇게 어렵지는 않습니다.다음은 A의 전체 예시입니다.TextView이는 터치 이벤트를 처리하기 위해 무시됩니다.
public class CustomTextView extends AppCompatTextView {
public CustomTextView(Context context) {
super(context);
}
public CustomTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
super.onTouchEvent(event);
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
return true;
case MotionEvent.ACTION_UP:
performClick();
return true;
}
return false;
}
// Because we call this from onTouchEvent, this code will be executed for both
// normal touch events and for when the system calls this using Accessibility
@Override
public boolean performClick() {
super.performClick();
doSomething();
return true;
}
private void doSomething() {
Toast.makeText(getContext(), "did something", Toast.LENGTH_SHORT).show();
}
}
그러면 그냥 이렇게 쓰실 겁니다.
<com.example.myapp.CustomTextView
android:id="@+id/textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="20dp"
android:text="Click me to do something"/>
사용자 지정 보기 작성에 대한 자세한 내용은 내 다른 답변을 참조하십시오.
옵션 2: 경고 묵음
다른 때에는 경고를 그냥 잠재우는 것이 더 나을 수도 있습니다.예를 들어, 당신이 원하는 것이 무엇인지 잘 모르겠습니다.Button터치 이벤트가 필요합니다.만약 당신이 커스텀 버튼을 만들어서 전화를 한다면,performClick()인에onTouchEvent위의 관례대로TextView, 그러면 매번 두 번씩 전화가 걸려올 것입니다. 왜냐하면Button이미 걸려온 전화performClick().
경고를 무시하고 싶은 몇 가지 이유는 다음과 같습니다.
- 터치 이벤트를 사용하여 수행하는 작업은 시각적으로만 표시됩니다.그것은 당신의 앱의 실제 작동에 영향을 주지 않습니다.
- 당신은 냉담하고 세상을 시각장애인들에게 더 나은 곳으로 만드는 것에 관심이 없습니다.
- 당신은 위의 옵션 1에서 내가 준 코드를 복사해서 붙여넣기 하는 것이 너무 귀찮습니다.
메소드 시작 부분에 다음 행을 추가하여 경고를 억제합니다.
@SuppressLint("ClickableViewAccessibility")
예를 들어,
@SuppressLint("ClickableViewAccessibility")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button myButton = findViewById(R.id.my_button);
myButton.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
return false;
}
});
}
해결책:
단추 또는 사용 중인 보기를 확장하는 클래스를 만들고 수행을 재정의합니다.클릭()
class TouchableButton extends Button { @Override public boolean performClick() { // do what you want return true; } }이제 xml 및/또는 코드로 터치 가능한 버튼을 사용하면 경고가 사라집니다!
다음을 추가해 보셨습니까?
view.performClick()
또는 suppresslint 주석 추가:
@SuppressLint("ClickableViewAccessibility")
?
사용자 정의 보기 컨트롤에는 비표준 터치 이벤트 동작이 필요할 수 있습니다.예를 들어 사용자 지정 컨트롤은 onTouchEvent(MotionEvent) listener 메서드를 사용하여 ACTION_DOWN 및 ACTION_UP 이벤트를 감지하고 특별 클릭 이벤트를 트리거할 수 있습니다.접근성 서비스와의 호환성을 유지하기 위해 이 사용자 지정 클릭 이벤트를 처리하는 코드는 다음을 수행해야 합니다.
해석된 클릭 동작에 적합한 Accessibility Event를 생성합니다.터치스크린을 사용할 수 없는 사용자를 위해 사용자 지정 클릭 동작을 수행할 수 있도록 내게 필요한 옵션 서비스를 활성화합니다.이러한 요구 사항을 효율적으로 처리하려면 코드에서 performClick() 메서드를 재정의해야 합니다. 이 메서드는 이 메서드의 슈퍼 구현을 호출한 다음 클릭 이벤트에서 필요한 모든 작업을 실행해야 합니다.사용자 지정 클릭 작업이 감지되면 해당 코드가 performClick() 메서드를 호출합니다.
https://developer.android.com/guide/topics/ui/accessibility/custom-views#custom-touch-events
에서 "OnTouchListener" MotionEvent"를 합니다.view.performClick();합니다.) 릭()합니다 )을.
예를 들어 클릭 소리의 형태로 사용자에게 피드백을 주는 것입니다.
경고를 억제할 수 있습니다.
@SuppressLint("ClickableViewAccessibility")
performClick()
언급URL : https://stackoverflow.com/questions/47107105/android-button-has-setontouchlistener-called-on-it-but-does-not-override-perform
'programing' 카테고리의 다른 글
| 입력 옆의 형태로 레이블 정렬 (0) | 2023.09.12 |
|---|---|
| LinkedList - malloc을 사용하여 할당된 메모리를 해제하는 방법 (0) | 2023.09.12 |
| 서피스 뷰와 뷰의 차이점은 무엇입니까? (0) | 2023.09.12 |
| php zip 내부의 파일에 대한 경로 없이 zip 생성 (0) | 2023.09.12 |
| 새로 추가된 입력 요소에 초점을 맞춥니다. (0) | 2023.09.12 |