คำเตือนนี้เกิดขึ้นเนื่องจาก Android ต้องการเตือนให้คุณนึกถึงคนตาบอดหรือผู้พิการทางสายตาที่อาจใช้แอปของคุณ ฉันขอแนะนำให้คุณดูวิดีโอนี้เพื่อดูภาพรวมคร่าวๆว่าเป็นอย่างไร
มุมมองมาตรฐาน UI (เช่นButton
,TextView
ฯลฯ ) มีการตั้งค่าทั้งหมดขึ้นเพื่อให้ผู้ใช้ตาบอดกับข้อเสนอแนะที่เหมาะสมผ่านบริการการเข้าถึง เมื่อคุณพยายามจัดการเหตุการณ์การสัมผัสด้วยตัวเองคุณกำลังตกอยู่ในอันตรายที่จะลืมให้ข้อเสนอแนะนั้น นี่คือสิ่งที่เตือนสำหรับ
ตัวเลือกที่ 1: สร้างมุมมองแบบกำหนดเอง
โดยปกติการจัดการเหตุการณ์การสัมผัสเป็นสิ่งที่ทำในมุมมองที่กำหนดเอง อย่าปิดตัวเลือกนี้เร็วเกินไป มันไม่ยากเลยจริงๆ นี่คือตัวอย่างทั้งหมดของสิ่ง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;
}
});
}
ImageView
ได้เรียกใช้ setOnTouchListener แต่ไม่ได้แทนที่ performClick หากมุมมองที่แทนที่ onTouchEvent หรือใช้ OnTouchListener จะไม่ใช้ performClick และเรียกมันเมื่อตรวจพบการคลิกมุมมองอาจไม่จัดการการดำเนินการการเข้าถึงอย่างถูกต้อง ตรรกะในการจัดการการคลิกควรวางไว้ใน View # performClick เนื่องจากบริการการเข้าถึงบางอย่างเรียกใช้ performClick เมื่อการดำเนินการคลิกเกิดขึ้น