หากแอปพลิเคชันของคุณกำหนดให้มี คอมโพเนนต์การแสดงผลที่กำหนดเอง คุณต้องทำให้ผู้อ่านเข้าถึงมุมมองได้ง่ายขึ้น ขั้นตอนต่อไปนี้สามารถช่วยปรับปรุงมุมมองที่กำหนดเอง การช่วยเหลือพิเศษ ดังที่อธิบายในหน้านี้
- จัดการการคลิกตัวควบคุมทิศทาง
- ใช้เมธอด API การช่วยเหลือพิเศษ
- ส่ง
AccessibilityEvent
ออบเจ็กต์เฉพาะสำหรับมุมมองที่กำหนดเอง - เติมข้อมูล
AccessibilityEvent
และ วันที่AccessibilityNodeInfo
สำหรับมุมมองของคุณ
จัดการการคลิกตัวควบคุมทิศทาง
ในอุปกรณ์ส่วนใหญ่ การคลิกมุมมองโดยใช้ตัวควบคุมทิศทางจะส่ง
KeyEvent
ด้วย
วันที่ KEYCODE_DPAD_CENTER
มุมมองที่ใช้อยู่ แฮนเดิลมุมมองมาตรฐานของ Android ทั้งหมด
KEYCODE_DPAD_CENTER
อย่างถูกต้อง เมื่อสร้างข้อตกลงที่กำหนดเอง
View
ควบคุม ตรวจดูว่ากิจกรรมนี้มีผลเหมือนกับการแตะมุมมองบนหน้าจอสัมผัส
การควบคุมที่กำหนดเองจะต้องดำเนินการกับ
KEYCODE_ENTER
เหตุการณ์ที่เดียวกับ KEYCODE_DPAD_CENTER
การดำเนินการนี้สร้างการโต้ตอบกับแป้นพิมพ์เต็มรูปแบบ
ง่ายสำหรับผู้ใช้
ใช้เมธอด API การช่วยเหลือพิเศษ
กิจกรรมการช่วยเหลือพิเศษคือข้อความเกี่ยวกับผู้ใช้ การโต้ตอบกับอินเทอร์เฟซแบบภาพของแอป
คอมโพเนนต์ ข้อความเหล่านี้ได้รับการจัดการโดยบริการการช่วยเหลือพิเศษ
ใช้ข้อมูลในเหตุการณ์เหล่านี้เพื่อจัดทำความคิดเห็นและข้อความแจ้งเพิ่มเติม การช่วยเหลือพิเศษ
เป็นส่วนหนึ่งของ View
และ
วันที่ View.AccessibilityDelegate
ใหม่ วิธีการมีดังต่อไปนี้
dispatchPopulateAccessibilityEvent()
onPopulateAccessibilityEvent()
สำหรับข้อมูลพร็อพเพอร์ตี้นี้
แล้วใช้วิธีการ dispatchPopulateAccessibilityEvent()
สำหรับองค์ประกอบย่อยแต่ละรายการ
onInitializeAccessibilityEvent()
TextView
หรือ
Button
ลบล้างเมธอดนี้
แล้วตั้งค่าข้อมูลเพิ่มเติมเกี่ยวกับมุมมองของคุณ เช่น ประเภทช่องรหัสผ่าน ช่องทำเครื่องหมาย
ประเภท หรือสถานะที่ระบุการโต้ตอบของผู้ใช้หรือความคิดเห็นเกี่ยวกับเหตุการณ์ โดยใช้
หากคุณลบล้างเมธอดนี้ ให้เรียกการใช้งานขั้นสูงและแก้ไขเฉพาะพร็อพเพอร์ตี้
ที่ Super class ไม่ได้ตั้งไว้onInitializeAccessibilityNodeInfo()
View
เริ่มต้นมีชุดพร็อพเพอร์ตี้มาตรฐานอยู่ แต่ถ้า
มุมมองที่กำหนดเองให้การควบคุมแบบอินเทอร์แอกทีฟที่นอกเหนือจาก TextView
หรือ
Button
โปรดลบล้างเมธอดนี้และตั้งค่าข้อมูลเพิ่มเติมเกี่ยวกับมุมมองของคุณ
ลงในออบเจ็กต์ AccessibilityNodeInfo
ที่จัดการโดยเมธอดนี้onPopulateAccessibilityEvent()
AccessibilityEvent
สำหรับ
และเรียกอีกอย่างว่าข้อมูลพร็อพเพอร์ตี้ย่อยของข้อมูลพร็อพเพอร์ตี้ที่สร้างการช่วยเหลือพิเศษ
กิจกรรม
onRequestSendAccessibilityEvent()
AccessibilityEvent
ขั้นตอนนี้จะช่วยให้มุมมองของผู้ปกครองแก้ไขการช่วยเหลือพิเศษได้
กิจกรรมที่มีข้อมูลเพิ่มเติม ใช้วิธีนี้เมื่อมุมมองที่กำหนดเองมี
การดูของเด็กและหากมุมมองของผู้ปกครองสามารถให้ข้อมูลบริบทเกี่ยวกับการช่วยเหลือพิเศษได้
กิจกรรมที่เป็นประโยชน์ต่อบริการการช่วยเหลือพิเศษsendAccessibilityEvent()
- ระบบเรียกใช้วิธีการนี้เมื่อผู้ใช้ดำเนินการกับข้อมูลพร็อพเพอร์ตี้ กิจกรรมจะได้รับการจัดประเภทตาม
ประเภทการดำเนินการของผู้ใช้ เช่น
TYPE_VIEW_CLICKED
โดยทั่วไป คุณต้องส่งAccessibilityEvent
เมื่อเนื้อหาของมุมมองที่กำหนดเองมีการเปลี่ยนแปลง sendAccessibilityEventUnchecked()
- เราจะใช้วิธีนี้เมื่อรหัสการโทรต้องควบคุมการตรวจหา
มีการเปิดใช้การช่วยเหลือพิเศษในอุปกรณ์
(
AccessibilityManager.isEnabled()
) หากคุณใช้วิธีนี้ ให้ทำการเรียกใช้เสมือนว่ามีการเปิดใช้การช่วยเหลือพิเศษ โดยไม่คำนึงถึง การตั้งค่าระบบ โดยทั่วไปแล้วคุณไม่จำเป็นต้องใช้วิธีนี้สำหรับมุมมองที่กำหนดเอง dispatchPopulateAccessibilityEvent()
onInitializeAccessibilityEvent()
onInitializeAccessibilityNodeInfo()
onPopulateAccessibilityEvent()
TYPE_VIEW_CLICKED
TYPE_VIEW_FOCUSED
TYPE_VIEW_HOVER_ENTER
TYPE_VIEW_HOVER_EXIT
TYPE_VIEW_LONG_CLICKED
TYPE_VIEW_SCROLLED
- สร้าง
AccessibilityEvent
ที่เหมาะสมสำหรับการดำเนินการคลิกที่ตีความ - เปิดใช้บริการการช่วยเหลือพิเศษเพื่อดำเนินการคลิกที่กำหนดเองสำหรับผู้ใช้ที่ไม่สามารถ ใช้หน้าจอสัมผัส
หากต้องการสนับสนุนการเข้าถึง ให้ลบล้างและใช้วิธีการช่วยเหลือพิเศษก่อนหน้านี้โดยตรงใน คลาสการแสดงผลที่กำหนดเอง
อย่างน้อยที่สุด ให้ใช้วิธีการช่วยเหลือพิเศษต่อไปนี้สำหรับคลาสมุมมองที่กำหนดเอง
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการใช้วิธีการเหล่านี้ โปรดดูหัวข้อเกี่ยวกับ การป้อนข้อมูลเหตุการณ์การช่วยเหลือพิเศษ
ส่งเหตุการณ์การช่วยเหลือพิเศษ
อาจจำเป็นต้องส่ง ทั้งนี้ขึ้นอยู่กับข้อมูลจำเพาะของมุมมองที่กำหนดเองของคุณ
AccessibilityEvent
ออบเจ็กต์ในเวลาที่ต่างกันหรือสำหรับกิจกรรมที่ไม่ได้จัดการโดยค่าเริ่มต้น
การใช้งานของคุณ คลาส View
จะมีการติดตั้งใช้งานเริ่มต้นสำหรับเหตุการณ์เหล่านี้
ประเภท:
โดยทั่วไป คุณจะต้องส่ง AccessibilityEvent
ทุกครั้งที่เนื้อหาที่กำหนดเอง
ดูการเปลี่ยนแปลง ตัวอย่างเช่น หากคุณใช้แถบเลื่อนแบบกำหนดเองที่ให้ผู้ใช้เลือก
ค่าตัวเลขโดยกดแป้นลูกศรซ้ายหรือขวา มุมมองที่กำหนดเองจะต้องแสดงเหตุการณ์
TYPE_VIEW_TEXT_CHANGED
ทุกครั้งที่ค่าแถบเลื่อนเปลี่ยนแปลง ตัวอย่างโค้ดต่อไปนี้แสดงการใช้
sendAccessibilityEvent()
วิธีรายงานเหตุการณ์นี้
Kotlin
override fun onKeyUp(keyCode: Int, event: KeyEvent): Boolean { return when(keyCode) { KeyEvent.KEYCODE_DPAD_LEFT -> { currentValue-- sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED) true } ... } }
Java
@Override public boolean onKeyUp (int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) { currentValue--; sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED); return true; } ... }
ป้อนข้อมูลเหตุการณ์การช่วยเหลือพิเศษ
AccessibilityEvent
แต่ละรายการมีชุดพร็อพเพอร์ตี้ที่จำเป็นซึ่งอธิบายพร็อพเพอร์ตี้
สถานะของมุมมอง พร็อพเพอร์ตี้เหล่านี้รวมถึงข้อมูลต่างๆ เช่น ชื่อคลาสของข้อมูลพร็อพเพอร์ตี้ และเนื้อหา
คำอธิบายและสถานะที่เลือก รายละเอียดพร็อพเพอร์ตี้ที่เฉพาะเจาะจงซึ่งจำเป็นสำหรับเหตุการณ์แต่ละประเภท
ในช่วง
AccessibilityEvent
เอกสารอ้างอิง
การใช้งาน View
ระบุค่าเริ่มต้นสำหรับรายการเหล่านี้
พร็อพเพอร์ตี้ที่จำเป็น ค่าเหล่านี้ซึ่งมีหลายค่า รวมถึงชื่อคลาสและการประทับเวลาเหตุการณ์
ที่มีให้โดยอัตโนมัติ หากกำลังสร้างคอมโพเนนต์มุมมองที่กำหนดเอง คุณต้องให้ข้อมูล
เกี่ยวกับเนื้อหาและลักษณะเฉพาะของมุมมอง ข้อมูลนี้สามารถทำได้ง่ายเพียงปุ่มเดียว
ป้ายกำกับและสามารถรวมข้อมูลสถานะเพิ่มเติมที่คุณต้องการเพิ่มลงในเหตุการณ์
ใช้เมนู
onPopulateAccessibilityEvent()
และ
วันที่ onInitializeAccessibilityEvent()
วิธีเพิ่มหรือแก้ไขข้อมูลใน AccessibilityEvent
ใช้เมนู
onPopulateAccessibilityEvent()
วิธีสำหรับการเพิ่มหรือแก้ไขข้อความโดยเฉพาะ
เนื้อหาของเหตุการณ์ ซึ่งเปลี่ยนเป็นการแจ้งด้วยเสียงผ่านบริการการช่วยเหลือพิเศษ เช่น
TalkBack ใช้เมธอด onInitializeAccessibilityEvent()
เพื่อป้อนข้อมูลเพิ่มเติม
ข้อมูลเกี่ยวกับเหตุการณ์ เช่น สถานะการเลือกของมุมมอง
นอกจากนี้ ให้ใช้
onInitializeAccessibilityNodeInfo()
บริการการช่วยเหลือพิเศษใช้ออบเจ็กต์ AccessibilityNodeInfo
ที่สร้างจากรายการนี้
ในการตรวจสอบลำดับชั้นการแสดงผลที่สร้างเหตุการณ์การช่วยเหลือพิเศษหลังจากที่ได้รับ
และแสดงความคิดเห็นที่เหมาะสมแก่ผู้ใช้
ตัวอย่างโค้ดต่อไปนี้แสดงวิธีลบล้างทั้ง 3 วิธีในมุมมองของคุณ
Kotlin
override fun onPopulateAccessibilityEvent(event: AccessibilityEvent?) { super.onPopulateAccessibilityEvent(event) // Call the super implementation to populate its text for the // event. Then, add text not present in a super class. // You typically only need to add the text for the custom view. if (text?.isNotEmpty() == true) { event?.text?.add(text) } } override fun onInitializeAccessibilityEvent(event: AccessibilityEvent?) { super.onInitializeAccessibilityEvent(event) // Call the super implementation to let super classes // set appropriate event properties. Then, add the new checked // property that is not supported by a super class. event?.isChecked = isChecked() } override fun onInitializeAccessibilityNodeInfo(info: AccessibilityNodeInfo?) { super.onInitializeAccessibilityNodeInfo(info) // Call the super implementation to let super classes set // appropriate info properties. Then, add the checkable and checked // properties that are not supported by a super class. info?.isCheckable = true info?.isChecked = isChecked() // You typically only need to add the text for the custom view. if (text?.isNotEmpty() == true) { info?.text = text } }
Java
@Override public void onPopulateAccessibilityEvent(AccessibilityEvent event) { super.onPopulateAccessibilityEvent(event); // Call the super implementation to populate its text for the // event. Then, add the text not present in a super class. // You typically only need to add the text for the custom view. CharSequence text = getText(); if (!TextUtils.isEmpty(text)) { event.getText().add(text); } } @Override public void onInitializeAccessibilityEvent(AccessibilityEvent event) { super.onInitializeAccessibilityEvent(event); // Call the super implementation to let super classes // set appropriate event properties. Then, add the new checked // property that is not supported by a super class. event.setChecked(isChecked()); } @Override public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) { super.onInitializeAccessibilityNodeInfo(info); // Call the super implementation to let super classes set // appropriate info properties. Then, add the checkable and checked // properties that are not supported by a super class. info.setCheckable(true); info.setChecked(isChecked()); // You typically only need to add the text for the custom view. CharSequence text = getText(); if (!TextUtils.isEmpty(text)) { info.setText(text); } }
คุณนำวิธีการเหล่านี้ไปใช้ได้โดยตรงในคลาสมุมมองที่กำหนดเอง
ให้บริบทการช่วยเหลือพิเศษที่ปรับแต่งได้
บริการการช่วยเหลือพิเศษจะตรวจสอบลำดับชั้นการดูที่มีคอมโพเนนต์อินเทอร์เฟซผู้ใช้ได้ ที่สร้างเหตุการณ์การช่วยเหลือพิเศษ วิธีนี้จะช่วยให้บริการช่วยเหลือพิเศษ แสดงบริบทได้ครบถ้วนยิ่งขึ้น ข้อมูลเพื่อช่วยเหลือผู้ใช้
ในบางกรณีที่บริการการช่วยเหลือพิเศษไม่ได้รับข้อมูลที่เพียงพอจากมุมมอง ลำดับชั้น ตัวอย่างของตัวอย่างนี้คือตัวควบคุมอินเทอร์เฟซที่กำหนดเองที่มี 2 รายการขึ้นไปแยกกัน พื้นที่ที่คลิกได้ เช่น ตัวควบคุมปฏิทิน ในกรณีนี้ บริการต่างๆ อาจไม่เพียงพอ เนื่องจากส่วนย่อยที่สามารถคลิกได้นั้นไม่ได้เป็นส่วนหนึ่งของลำดับชั้นการแสดงผล
![](https://developer.android.com/static/guide/topics/ui/accessibility/calendar.png?authuser=8&hl=th)
รูปที่ 1 มุมมองปฏิทินแบบกำหนดเองพร้อมองค์ประกอบวันที่ที่เลือกได้
ในตัวอย่างในรูปที่ 1 การใช้งานปฏิทินทั้งหมดเป็นมุมมองเดียว ดังนั้นการช่วยเหลือพิเศษ ไม่ได้รับข้อมูลที่เพียงพอเกี่ยวกับเนื้อหาในมุมมองและการเลือกของผู้ใช้ ภายในมุมมอง เว้นแต่นักพัฒนาแอปจะให้ข้อมูลเพิ่มเติม เช่น หากผู้ใช้คลิก ในวันที่มีป้ายกำกับว่า 17 เฟรมเวิร์กการช่วยเหลือพิเศษจะได้รับเฉพาะข้อมูลคำอธิบายเท่านั้น สำหรับการควบคุมปฏิทินทั้งหมด ในกรณีนี้ บริการการช่วยเหลือพิเศษของ TalkBack จะประกาศ "ปฏิทิน" หรือ "ปฏิทินเมษายน" และผู้ใช้ไม่ทราบว่าจะเลือกวันใด
เพื่อให้ข้อมูลบริบทที่เพียงพอสำหรับบริการการช่วยเหลือพิเศษในสถานการณ์เช่นนี้ ทำให้คุณสามารถระบุลำดับชั้นของมุมมองเสมือนได้ ลำดับชั้นของมุมมองเสมือนจริงคือ สำหรับนักพัฒนาแอปในการนำเสนอมุมมองที่ดียิ่งขึ้นสำหรับบริการการช่วยเหลือพิเศษที่ ตรงกับข้อมูลบนหน้าจอมากที่สุด แนวทางนี้ช่วยให้บริการการช่วยเหลือพิเศษ ข้อมูลบริบทที่เป็นประโยชน์ต่อผู้ใช้
อีกสถานการณ์ที่อาจต้องใช้ลำดับชั้นของการดูเสมือนก็คือ อินเทอร์เฟซผู้ใช้ที่มี
ชุดการควบคุม View
ที่มีฟังก์ชันที่เกี่ยวข้องอย่างใกล้ชิด โดยมีการดำเนินการ
ตัวควบคุมจะมีผลต่อเนื้อหาขององค์ประกอบอย่างน้อย 1 อย่าง เช่น เครื่องมือเลือกตัวเลขที่แยกต่างหาก
และปุ่มลง ในกรณีนี้ บริการการช่วยเหลือพิเศษจะไม่ได้รับข้อมูลที่เพียงพอเนื่องจาก
การดำเนินการในการควบคุมหนึ่งจะเปลี่ยนเนื้อหาในอีกการควบคุมหนึ่ง และความสัมพันธ์ของการควบคุมเหล่านั้นอาจไม่
กับบริการอย่างชัดเจน
ในการจัดการกับสถานการณ์นี้ ให้จัดกลุ่มการควบคุมที่เกี่ยวข้องโดยมีมุมมอง "ที่มี" และจัดเตรียม ดูลำดับชั้นจากคอนเทนเนอร์นี้เพื่อแสดงข้อมูลและลักษณะการทำงานที่ระบุโดย
หากต้องการระบุลำดับชั้นของมุมมองเสมือนสำหรับข้อมูลพร็อพเพอร์ตี้ ให้แทนที่
getAccessibilityNodeProvider()
ในมุมมองที่กำหนดเองหรือกลุ่มมุมมอง และแสดงการติดตั้งใช้งาน
AccessibilityNodeProvider
คุณสามารถใช้ลำดับชั้นของมุมมองเสมือนได้โดยใช้ไลบรารีการสนับสนุนที่มี
ViewCompat.getAccessibilityNodeProvider()
และระบุการติดตั้งใช้งาน
AccessibilityNodeProviderCompat
ลดความซับซ้อนในการให้ข้อมูลและบริการการช่วยเหลือพิเศษและการจัดการ
คุณมุ่งเน้นการช่วยเหลือพิเศษ
ExploreByTouchHelper
ซึ่งจะระบุ AccessibilityNodeProviderCompat
และสามารถแนบเป็นไฟล์ข้อมูลพร็อพเพอร์ตี้ได้
AccessibilityDelegateCompat
โดยการโทร
setAccessibilityDelegate
ดูตัวอย่างได้ที่
ExploreByTouchHelperActivity
วิดเจ็ตเฟรมเวิร์กก็ใช้ ExploreByTouchHelper
เช่นกัน เช่น
CalendarView
ผ่านทาง
หน้าจอสำหรับเด็ก
SimpleMonthView
จัดการกิจกรรมการแตะที่กำหนดเอง
การควบคุมมุมมองที่กำหนดเองอาจกำหนดให้มีลักษณะการทำงานของการแตะที่ไม่เป็นไปตามมาตรฐาน ดังที่แสดงใน ดังตัวอย่างต่อไปนี้
กำหนดการทำงานที่อิงกับคลิก
หากวิดเจ็ตใช้
OnClickListener
หรือ
OnLongClickListener
ระบบจะจัดการ
ACTION_CLICK
และ
ACTION_LONG_CLICK
การดำเนินการสำหรับคุณ หากแอปของคุณใช้วิดเจ็ตที่ปรับแต่งมากขึ้นซึ่งอาศัย
อินเทอร์เฟซ OnTouchListener
กำหนดตัวแฮนเดิลที่กำหนดเองสำหรับการดำเนินการเข้าถึงที่อิงตามคลิก โดยโทร
replaceAccessibilityAction()
สำหรับแต่ละการกระทำ ดังที่แสดงในข้อมูลโค้ดต่อไปนี้
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { ... // Assumes that the widget is designed to select text when tapped, and selects // all text when tapped and held. In its strings.xml file, this app sets // "select" to "Select" and "select_all" to "Select all". ViewCompat.replaceAccessibilityAction( binding.textSelectWidget, ACTION_CLICK, getString(R.string.select) ) { view, commandArguments -> selectText() } ViewCompat.replaceAccessibilityAction( binding.textSelectWidget, ACTION_LONG_CLICK, getString(R.string.select_all) ) { view, commandArguments -> selectAllText() } }
Java
@Override protected void onCreate(Bundle savedInstanceState) { ... // Assumes that the widget is designed to select text when tapped, and select // all text when tapped and held. In its strings.xml file, this app sets // "select" to "Select" and "select_all" to "Select all". ViewCompat.replaceAccessibilityAction( binding.textSelectWidget, ACTION_CLICK, getString(R.string.select), (view, commandArguments) -> selectText()); ViewCompat.replaceAccessibilityAction( binding.textSelectWidget, ACTION_LONG_CLICK, getString(R.string.select_all), (view, commandArguments) -> selectAllText()); }
สร้างเหตุการณ์การคลิกที่กําหนดเอง
การควบคุมที่กำหนดเองสามารถใช้onTouchEvent(MotionEvent)
Listener เพื่อตรวจหา
ACTION_DOWN
และ
ACTION_UP
กิจกรรมและ
ทำให้เกิดกิจกรรมการคลิกพิเศษ ในการคงรักษาความเข้ากันได้กับบริการการเข้าถึง รหัสที่
แฮนเดิลที่กำหนดเองนี้ต้องทำดังนี้
ในการจัดการข้อกำหนดเหล่านี้อย่างมีประสิทธิภาพ โค้ดของคุณต้องลบล้าง
performClick()
วิธี
ซึ่งต้องเรียกใช้วิธีการนี้ขั้นสูง และดำเนินการใดก็ตาม
ที่จำเป็นสำหรับเหตุการณ์การคลิก เมื่อตรวจพบการคลิกที่กำหนดเอง โค้ดนั้นจะต้องเรียก
performClick()
วิธี ตัวอย่างโค้ดต่อไปนี้แสดงรูปแบบนี้
Kotlin
class CustomTouchView(context: Context) : View(context) { var downTouch = false override fun onTouchEvent(event: MotionEvent): Boolean { super.onTouchEvent(event) // Listening for the down and up touch events. return when (event.action) { MotionEvent.ACTION_DOWN -> { downTouch = true true } MotionEvent.ACTION_UP -> if (downTouch) { downTouch = false performClick() // Call this method to handle the response and // enable accessibility services to // perform this action for a user who can't // tap the touchscreen. true } else { false } else -> false // Return false for other touch events. } } override fun performClick(): Boolean { // Calls the super implementation, which generates an AccessibilityEvent // and calls the onClick() listener on the view, if any. super.performClick() // Handle the action for the custom click here. return true } }
Java
class CustomTouchView extends View { public CustomTouchView(Context context) { super(context); } boolean downTouch = false; @Override public boolean onTouchEvent(MotionEvent event) { super.onTouchEvent(event); // Listening for the down and up touch events switch (event.getAction()) { case MotionEvent.ACTION_DOWN: downTouch = true; return true; case MotionEvent.ACTION_UP: if (downTouch) { downTouch = false; performClick(); // Call this method to handle the response and // enable accessibility services to // perform this action for a user who can't // tap the touchscreen. return true; } } return false; // Return false for other touch events. } @Override public boolean performClick() { // Calls the super implementation, which generates an AccessibilityEvent // and calls the onClick() listener on the view, if any. super.performClick(); // Handle the action for the custom click here. return true; } }
รูปแบบก่อนหน้าช่วยให้มั่นใจได้ว่าเหตุการณ์การคลิกที่กําหนดเองจะเข้ากันได้กับการช่วยเหลือพิเศษ
บริการโดยใช้เมธอด performClick()
เพื่อสร้างเหตุการณ์การช่วยเหลือพิเศษและ
ให้จุดแรกเข้าสำหรับบริการการเข้าถึงเพื่อดำเนินการในนามของผู้ใช้ที่ดำเนินการ
คลิกกิจกรรม