Trong trường hợp bạn không sử dụng Custom View
mà nó ghi đè rõ ràng onPerformClick
, cảnh báo sẽ không bị xóa khi chỉ làm theo câu trả lời của Secko.
Ngoài câu trả lời của anh ấy, để làm điều tương tự trên các lớp như android.widget.Button
hoặc Button
bạn cần tạo một chế độ xem tùy chỉnh đơn giản để mở rộng chế độ xem mục tiêu.
Thí dụ :
Lớp Chế độ xem Tùy chỉnh:
public class UselessButton extends AppCompatButton {
public UselessButton(Context context) {
super(context);
}
public UselessButton(Context context, AttributeSet attrs) {
super(context, attrs);
}
public UselessButton(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public boolean performClick() {
return super.performClick();
}
}
XML :
<stackoverflow.onEarth.UselessButton
android:id="@+id/left"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
android:background="@drawable/left"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.16"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBaseline_toBaselineOf="@+id/right"
app:layout_constraintVertical_bias="0.5" />
Java :
left.setOnTouchListener((v, event) -> {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
enLeft = 1;
enRight = 0;
return true;
} else if (event.getAction() == MotionEvent.ACTION_UP) {
enLeft = 0;
v.performClick();
return false;
} else {
return false;
}
});
Sự cố hiện tại: Cảnh báo đã được IDE giải quyết, nhưng không thể thấy hành động nhấp này thực tế thực hiện trên Thiết bị Android thực.
CHỈNH SỬA : Đã sửa lỗi nhận sự kiện nhấp chuột: Sử dụngView.setPressed(boolean)
down.setOnTouchListener((v, event) -> {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
enFront = 0;
enBack = 1;
left.setPressed(true);
return true;
} else if (event.getAction() == MotionEvent.ACTION_UP) {
enBack = 0;
v.performClick();
v.setPressed(false);
return false;
} else {
return false;
}
v.performClick()
. Quá trình triển khai sẽ phát một chút âm thanh (nếu bạn đã bật nó trên thiết bị của mình) và gọi onClickListener, mà bạn có thể không ghi đè