Android รองรับหน้าจอสัมผัสและทัชแพดหลากหลายประเภท รวมถึง แท็บเล็ตดิจิทัลไลเซอร์ที่ใช้สไตลัส
หน้าจอสัมผัสคืออุปกรณ์สัมผัสที่เชื่อมโยงกับจอแสดงผลเพื่อให้ ผู้ใช้รู้สึกว่าได้จัดการรายการบนหน้าจอโดยตรง
ทัชแพดคืออุปกรณ์สัมผัสที่ไม่ได้เชื่อมโยงกับจอแสดงผล เช่น แท็บเล็ตดิจิทัล โดยปกติแล้ว ทัชแพดจะใช้สำหรับการชี้หรือ การวางตำแหน่งแบบอ้อมที่แน่นอน หรือการควบคุมอินเทอร์เฟซผู้ใช้ด้วยท่าทางสัมผัส
อุปกรณ์ระบบสัมผัสอาจมีปุ่มที่มีฟังก์ชันคล้ายกับปุ่มเมาส์
บางครั้งอุปกรณ์ระบบสัมผัสอาจถูกดัดแปลงโดยใช้เครื่องมือต่างๆ เช่น นิ้วหรือสไตลัส ทั้งนี้ขึ้นอยู่กับเทคโนโลยีเซ็นเซอร์สัมผัสพื้นฐาน
บางครั้งจะใช้อุปกรณ์ระบบสัมผัสเพื่อใช้ปุ่มเสมือน เช่น ในอุปกรณ์ Android บางรุ่น พื้นที่เซ็นเซอร์หน้าจอสัมผัสจะขยายออกไปนอกขอบของจอแสดงผลและมีจุดประสงค์ 2 อย่างในฐานะที่เป็นส่วนหนึ่งของแป้นพิมพ์ที่ไวต่อการสัมผัส
เนื่องจากอุปกรณ์ระบบสัมผัสมีความหลากหลายมาก Android จึงต้องอาศัยพร็อพเพอร์ตี้การกำหนดค่าจำนวนมากเพื่ออธิบายลักษณะและลักษณะการทำงานที่ต้องการของอุปกรณ์แต่ละเครื่อง
การแยกประเภทอุปกรณ์ระบบสัมผัส
ระบบจะจัดประเภทอุปกรณ์อินพุตเป็นอุปกรณ์มัลติทัชหากเป็นไปตามเงื่อนไขทั้ง 2 ข้อต่อไปนี้
- อุปกรณ์อินพุตรายงานการมีอยู่ของแกนสัมบูรณ์ ABS_MT_POSITION_XและABS_MT_POSITION_Y
- อุปกรณ์อินพุตไม่มีปุ่มเกมแพด เงื่อนไขนี้ ช่วยแก้ความคลุมเครือเกี่ยวกับเกมแพดบางรุ่นที่รายงานแกนด้วยโค้ด ที่ทับซ้อนกับโค้ดของแกน MT
ระบบจะจัดประเภทอุปกรณ์อินพุตเป็นอุปกรณ์แบบสัมผัสเดียวหากเป็นไปตามเงื่อนไขทั้ง 2 ข้อต่อไปนี้
- อุปกรณ์อินพุตไม่ได้จัดเป็นอุปกรณ์มัลติทัช อุปกรณ์อินพุต จะได้รับการจัดประเภทเป็นอุปกรณ์แบบสัมผัสเดียวหรืออุปกรณ์แบบมัลติทัช ไม่เคยเป็นทั้ง 2 อย่าง
- อุปกรณ์ป้อนข้อมูลจะรายงานการมีอยู่ของแกนสัมบูรณ์ ABS_XและABS_Yรวมถึงการมีอยู่ของรหัสคีย์BTN_TOUCH
เมื่อจัดประเภทอุปกรณ์ป้อนข้อมูลเป็นอุปกรณ์สัมผัส ระบบจะพิจารณาการมีอยู่ ของปุ่มเสมือนโดยพยายามโหลดไฟล์แผนที่ปุ่มเสมือน สำหรับอุปกรณ์ หากมีแผนที่คีย์เสมือน ระบบจะโหลดไฟล์เลย์เอาต์คีย์ สำหรับอุปกรณ์ด้วย ดูข้อมูลเกี่ยวกับตำแหน่งและรูปแบบของไฟล์เหล่านี้ได้ที่ [Virtual key map files](#virtual-key-map-files)
จากนั้นระบบจะโหลดไฟล์การกำหนดค่าอุปกรณ์อินพุตสำหรับอุปกรณ์ระบบสัมผัส
อุปกรณ์สัมผัสในตัวทั้งหมดควรมีไฟล์กำหนดค่าอุปกรณ์อินพุต หากไม่มีไฟล์กำหนดค่าอุปกรณ์อินพุต ระบบ จะเลือกการกำหนดค่าเริ่มต้นที่เหมาะสมสำหรับอุปกรณ์ต่อพ่วงแบบสัมผัส อเนกประสงค์ เช่น หน้าจอสัมผัส HID แบบ USB หรือ Bluetooth ภายนอก หรือทัชแพด ค่าเริ่มต้นเหล่านี้ไม่ได้ออกแบบมาสำหรับหน้าจอสัมผัสในตัวและอาจทำให้เกิดลักษณะการทำงานที่ไม่ถูกต้อง
หลังจากโหลดการกำหนดค่าอุปกรณ์อินพุตแล้ว ระบบจะจัดประเภทอุปกรณ์อินพุตเป็นอุปกรณ์หน้าจอสัมผัส ทัชแพด หรือพอยน์เตอร์
- อุปกรณ์หน้าจอสัมผัสใช้สำหรับการจัดการออบเจ็กต์บนหน้าจอโดยตรง ผู้ใช้แตะหน้าจอโดยตรง ดังนั้นระบบจึงไม่ ต้องมีองค์ประกอบเพิ่มเติมเพื่อระบุออบเจ็กต์ที่ กำลังดำเนินการ
- อุปกรณ์ทัชแพดใช้เพื่อระบุข้อมูลการวางตำแหน่งที่แน่นอน ให้กับแอปเกี่ยวกับการแตะในพื้นที่เซ็นเซอร์ที่กำหนด ซึ่งอาจเป็นประโยชน์ สำหรับแท็บเล็ตดิจิทัล
- อุปกรณ์พอยน์เตอร์ใช้สำหรับการจัดการออบเจ็กต์บนหน้าจอโดยอ้อม โดยใช้เคอร์เซอร์ ระบบจะตีความนิ้วเป็นท่าทางสัมผัสแบบมัลติทัช เครื่องมืออื่นๆ เช่น สไตลัส จะได้รับการตีความโดยใช้ ตำแหน่งสัมบูรณ์ ดูข้อมูลเพิ่มเติมได้ที่ ท่าทางสัมผัสแบบมัลติทัชโดยอ้อม
ระบบจะใช้กฎต่อไปนี้เพื่อจัดประเภทอุปกรณ์อินพุตเป็นหน้าจอสัมผัส ทัชแพด หรืออุปกรณ์ชี้
- หากตั้งค่าพร็อพเพอร์ตี้ touch.deviceTypeระบบจะตั้งค่าประเภทอุปกรณ์ตามที่ระบุ
- หากอุปกรณ์อินพุตรายงานว่ามีพร็อพเพอร์ตี้อินพุต INPUT_PROP_DIRECT(ผ่านEVIOCGPROPioctl) ระบบจะตั้งค่าประเภทอุปกรณ์เป็นหน้าจอสัมผัส เงื่อนไขนี้ถือว่าอุปกรณ์สัมผัสอินพุตโดยตรง เชื่อมต่อกับจอแสดงผลที่เชื่อมต่ออยู่ด้วย
- หากอุปกรณ์อินพุตรายงานว่ามีพร็อพเพอร์ตี้อินพุต INPUT_PROP_POINTER(ผ่านEVIOCGPROPioctl) ระบบจะตั้งค่าประเภทอุปกรณ์ เป็น pointer
- หากอุปกรณ์อินพุตรายงานว่ามีแกนสัมพัทธ์ REL_XหรือREL_Yระบบจะตั้งค่าประเภทอุปกรณ์เป็นทัชแพด เงื่อนไขนี้ แก้ปัญหาความคลุมเครือสำหรับอุปกรณ์ป้อนข้อมูลที่ประกอบด้วยทั้งเมาส์และ ทัชแพด ในกรณีนี้ จะไม่มีการใช้ทัชแพดเพื่อควบคุม เคอร์เซอร์เนื่องจากเมาส์ควบคุมอยู่แล้ว
- มิเช่นนั้น ระบบจะตั้งค่าประเภทอุปกรณ์เป็นพอยน์เตอร์ ค่าเริ่มต้นนี้ช่วยให้มั่นใจได้ว่า ทัชแพดที่ไม่ได้กำหนดวัตถุประสงค์พิเศษอื่นๆ จะควบคุมเคอร์เซอร์
ปุ่ม
ปุ่มเป็นตัวควบคุมที่ไม่บังคับซึ่งแอปสามารถใช้เพื่อดำเนินการ ฟังก์ชันเพิ่มเติมได้ ปุ่มบนอุปกรณ์ระบบสัมผัสจะทำงานคล้ายกับปุ่มเมาส์ และส่วนใหญ่จะใช้กับอุปกรณ์ระบบสัมผัสประเภทเคอร์เซอร์หรือสไตลัส
ปุ่มที่รองรับมีดังนี้
- BTN_LEFT: แมปกับ- MotionEvent.BUTTON_PRIMARY
- BTN_RIGHT: แมปกับ- MotionEvent.BUTTON_SECONDARY
- BTN_MIDDLE: แมปกับ- MotionEvent.BUTTON_MIDDLE
- BTN_BACKและ- BTN_SIDE: แมปกับ- MotionEvent.BUTTON_BACKการกดปุ่มนี้ยังสังเคราะห์การกดแป้นด้วยรหัสแป้น- KeyEvent.KEYCODE_BACKด้วย
- BTN_FORWARDและ- BTN_EXTRA: แมปกับ- MotionEvent.BUTTON_FORWARDการกดปุ่มนี้ยังสังเคราะห์การกดแป้น ด้วยรหัสแป้น- KeyEvent.KEYCODE_FORWARDด้วย
- BTN_STYLUS: แมปกับ- MotionEvent.BUTTON_SECONDARY
- BTN_STYLUS2: แมปกับ- MotionEvent.BUTTON_TERTIARY
เครื่องมือและประเภทเครื่องมือ
เครื่องมือคือ นิ้ว สไตลัส หรืออุปกรณ์อื่นๆ ที่ใช้โต้ตอบกับ อุปกรณ์ระบบสัมผัส อุปกรณ์ระบบสัมผัสบางรุ่นสามารถแยกความแตกต่างระหว่างเครื่องมือประเภทต่างๆ ได้
ในส่วนอื่นๆ ของ Android เช่น ใน MotionEvent API มักเรียกเครื่องมือว่าพอยน์เตอร์
ระบบรองรับเครื่องมือประเภทต่อไปนี้
- BTN_TOOL_FINGERและ- MT_TOOL_FINGER: แมปกับ- MotionEvent.TOOL_TYPE_FINGER
- BTN_TOOL_PENและ- MT_TOOL_PEN: แมปกับ- MotionEvent.TOOL_TYPE_STYLUS
- BTN_TOOL_RUBBER: แมปกับ- MotionEvent.TOOL_TYPE_ERASER
- BTN_TOOL_BRUSH: แมปกับ- MotionEvent.TOOL_TYPE_STYLUS
- BTN_TOOL_PENCIL: แมปกับ- MotionEvent.TOOL_TYPE_STYLUS
- BTN_TOOL_AIRBRUSH: แมปกับ- MotionEvent.TOOL_TYPE_STYLUS
- BTN_TOOL_MOUSE: แมปกับ- MotionEvent.TOOL_TYPE_MOUSE
- BTN_TOOL_LENS: แมปกับ- MotionEvent.TOOL_TYPE_MOUSE
- BTN_TOOL_DOUBLETAP,- BTN_TOOL_TRIPLETAPและ- BTN_TOOL_QUADTAP: แมปกับ- MotionEvent.TOOL_TYPE_FINGER
การโฮเวอร์เทียบกับการแตะเครื่องมือ
เครื่องมืออาจสัมผัสกับอุปกรณ์ระบบสัมผัสหรืออยู่ในระยะและโฉบ เหนืออุปกรณ์ อุปกรณ์ระบบสัมผัสบางรุ่นไม่สามารถตรวจจับการมีอยู่ของเครื่องมือที่ วางเหนืออุปกรณ์ระบบสัมผัสได้ อุปกรณ์ที่ทำได้ เช่น อุปกรณ์แปลงสัญญาณสไตลัสที่ใช้ RF มักจะตรวจจับได้เมื่อเครื่องมืออยู่ในช่วงที่จำกัดของอุปกรณ์แปลงสัญญาณ
InputReader คอมโพเนนต์จะแยกเครื่องมือสัมผัสออกจากเครื่องมือที่วางเมาส์
 ในทำนองเดียวกัน การแตะเครื่องมือและการวางเมาส์เหนือเครื่องมือจะรายงานไปยังแอป
ในลักษณะที่แตกต่างกัน
ระบบจะรายงานเครื่องมือสัมผัสไปยังแอปเป็นเหตุการณ์การสัมผัส
โดยใช้ MotionEvent.ACTION_DOWN, MotionEvent.ACTION_MOVE,
MotionEvent.ACTION_DOWN,
MotionEvent.ACTION_POINTER_DOWN และ MotionEvent.ACTION_POINTER_UP
ระบบจะรายงานเครื่องมือที่โฮเวอร์ไปยังแอปเป็นเหตุการณ์การเคลื่อนไหวทั่วไปโดยใช้
MotionEvent.ACTION_HOVER_ENTER, MotionEvent.ACTION_HOVER_MOVE
และ MotionEvent.ACTION_HOVER_EXIT
ข้อกำหนดของไดรเวอร์อุปกรณ์ระบบสัมผัส
- ไดรเวอร์อุปกรณ์ระบบสัมผัสควรลงทะเบียนเฉพาะแกนและรหัสคีย์สำหรับแกน
    และปุ่มที่รองรับ การลงทะเบียนแกนหรือรหัสคีย์ที่ไม่รองรับ
    อาจทำให้เกิดความสับสนในอัลกอริทึมการจัดประเภทอุปกรณ์หรือทำให้ระบบตรวจพบความสามารถของอุปกรณ์
    อย่างไม่ถูกต้อง เช่น หากอุปกรณ์รายงานรหัสคีย์
    BTN_TOUCHระบบจะ ถือว่าใช้BTN_TOUCHเสมอเพื่อระบุว่าเครื่องมือ สัมผัสหน้าจอหรือไม่ ดังนั้นจึงBTN_TOUCHไม่ควรใช้เพื่อระบุ ว่าเครื่องมืออยู่ในช่วงและวางเมาส์
- อุปกรณ์แบบสัมผัสเดียวจะใช้เหตุการณ์อินพุตของ Linux ต่อไปนี้
 - ABS_X: (ต้องระบุ) รายงานพิกัด X ของเครื่องมือ
- ABS_Y: (ต้องระบุ) รายงานพิกัด Y ของเครื่องมือ
- ABS_PRESSURE: (ไม่บังคับ) รายงานแรงกดทางกายภาพที่ใช้กับปลาย ของเครื่องมือหรือความแรงของสัญญาณของการสัมผัส
- ABS_TOOL_WIDTH: (ไม่บังคับ) รายงานพื้นที่หน้าตัดหรือความกว้างของ การสัมผัสหรือของเครื่องมือเอง
- ABS_DISTANCE: (ไม่บังคับ) รายงานระยะห่างของเครื่องมือจากพื้นผิว ของอุปกรณ์ระบบสัมผัส
- ABS_TILT_X: (ไม่บังคับ) รายงานการเอียงของเครื่องมือจากพื้นผิวของ อุปกรณ์ระบบสัมผัสตามแกน X
- ABS_TILT_Y: (ไม่บังคับ) รายงานการเอียงของเครื่องมือจากพื้นผิวของ อุปกรณ์ระบบสัมผัสตามแกน Y
- BTN_TOUCH: (ต้องระบุ) ระบุว่าเครื่องมือสัมผัส อุปกรณ์หรือไม่
- BTN_LEFT,- BTN_RIGHT,- BTN_MIDDLE,- BTN_BACK- BTN_SIDE,- BTN_FORWARD- BTN_EXTRA,- BTN_STYLUS,- BTN_STYLUS2(ไม่บังคับ) สถานะปุ่มรายงาน
- BTN_TOOL_FINGER,- BTN_TOOL_PEN,- BTN_TOOL_RUBBER,- BTN_TOOL_BRUSH,- BTN_TOOL_PENCIL,- BTN_TOOL_AIRBRUSH,- BTN_TOOL_MOUSE,- BTN_TOOL_LENS,- BTN_TOOL_DOUBLETAP,- BTN_TOOL_TRIPLETAP,- BTN_TOOL_QUADTAP: (ไม่บังคับ) รายงานประเภทเครื่องมือ
 
- อุปกรณ์มัลติทัชใช้เหตุการณ์อินพุต Linux ต่อไปนี้
 - ABS_MT_POSITION_X: (ต้องระบุ) รายงานพิกัด X ของเครื่องมือ
- ABS_MT_POSITION_Y: (ต้องระบุ) รายงานพิกัด Y ของเครื่องมือ
- ABS_MT_PRESSURE: (ไม่บังคับ) รายงานแรงกดทางกายภาพที่ใช้กับ ปลายเครื่องมือหรือความแรงของสัญญาณการสัมผัส
- ABS_MT_TOUCH_MAJOR: (ไม่บังคับ) รายงานพื้นที่หน้าตัดของ การสัมผัส หรือความยาวของมิติที่ยาวกว่าของการสัมผัส
- ABS_MT_TOUCH_MINOR: (ไม่บังคับ) รายงานความยาวของมิติข้อมูลที่สั้นกว่า ของการสัมผัส ไม่ควรใช้แกนนี้หาก- ABS_MT_TOUCH_MAJORรายงานการวัดพื้นที่
- ABS_MT_WIDTH_MAJOR: (ไม่บังคับ) รายงานพื้นที่หน้าตัดของ เครื่องมือเอง หรือความยาวของมิติที่ยาวกว่าของเครื่องมือเอง อย่าใช้แกนนี้ เว้นแต่คุณจะทราบขนาดของเครื่องมือ
- ABS_MT_WIDTH_MINOR: (ไม่บังคับ) รายงานความยาวของมิติข้อมูลที่สั้นกว่า ของเครื่องมือเอง ไม่ควรใช้แกนนี้หาก- ABS_MT_WIDTH_MAJORรายงาน การวัดพื้นที่ หรือหากไม่ทราบขนาดของเครื่องมือ
- ABS_MT_ORIENTATION: (ไม่บังคับ) รายงานการวางแนวของเครื่องมือ
- ABS_MT_DISTANCE: (ไม่บังคับ) รายงานระยะห่างของเครื่องมือจาก พื้นผิวของอุปกรณ์ระบบสัมผัส
- ABS_MT_TOOL_TYPE: (ไม่บังคับ) รายงาน ประเภทเครื่องมือเป็น- MT_TOOL_FINGERหรือ- MT_TOOL_PEN
- ABS_MT_TRACKING_ID: (ไม่บังคับ) รายงานรหัสติดตามของเครื่องมือ รหัสการติดตามคือจำนวนเต็มที่ไม่เป็นลบโดยพลการซึ่งใช้เพื่อระบุ และติดตามเครื่องมือแต่ละอย่างแยกกันเมื่อมีเครื่องมือหลายอย่างทำงานอยู่ เช่น เมื่อมีนิ้วหลายนิ้วสัมผัสอุปกรณ์ นิ้วแต่ละนิ้วควรได้รับรหัสการติดตามที่แตกต่างกัน ซึ่งจะใช้ตราบใดที่นิ้วยังคงสัมผัสอยู่ รหัสติดตาม สามารถนำกลับมาใช้ใหม่ได้เมื่อเครื่องมือที่เชื่อมโยงอยู่นอกระยะ
- ABS_MT_SLOT: (ไม่บังคับ) รายงานรหัสช่องของเครื่องมือเมื่อใช้ โปรโตคอลมัลติทัช 'B' ของ Linux ดูรายละเอียดเพิ่มเติมได้ในเอกสารประกอบเกี่ยวกับโปรโตคอลมัลติทัชของ Linux
- BTN_TOUCH: (ต้องระบุ) ระบุว่าเครื่องมือสัมผัส อุปกรณ์หรือไม่
- BTN_LEFT,- BTN_RIGHT,- BTN_MIDDLE,- BTN_BACK- BTN_SIDE,- BTN_FORWARD- BTN_EXTRA,- BTN_STYLUS,- BTN_STYLUS2(ไม่บังคับ) สถานะปุ่มรายงาน
- BTN_TOOL_FINGER,- BTN_TOOL_PEN,- BTN_TOOL_RUBBER- BTN_TOOL_BRUSH- BTN_TOOL_PENCIL,- BTN_TOOL_AIRBRUSH,- BTN_TOOL_MOUSE- BTN_TOOL_LENS- BTN_TOOL_DOUBLETAP,- BTN_TOOL_TRIPLETAP,- BTN_TOOL_QUADTAP(ไม่บังคับ) รายงานประเภทเครื่องมือ
 
- หากกำหนดแกนสำหรับทั้งโปรโตคอลแบบแตะครั้งเดียวและแบบมัลติทัช ระบบจะใช้เฉพาะแกนแบบมัลติทัชและเพิกเฉยต่อแกนแบบแตะครั้งเดียว
- ค่าต่ำสุดและสูงสุดของแกน - ABS_X,- ABS_Y,- ABS_MT_POSITION_X, และ- ABS_MT_POSITION_Yจะกำหนดขอบเขตของพื้นที่ใช้งานของอุปกรณ์ ในหน่วยพื้นผิวเฉพาะของอุปกรณ์ ในกรณีของหน้าจอสัมผัส พื้นที่ใช้งาน จะอธิบายส่วนของอุปกรณ์สัมผัสที่ครอบคลุมจอแสดงผลจริง- สำหรับหน้าจอสัมผัส ระบบจะประมาณค่าตำแหน่งสัมผัสที่รายงานโดยอัตโนมัติ ในหน่วยพื้นผิวเพื่อรับตำแหน่งสัมผัสในพิกเซลของจอแสดงผลตาม การคำนวณต่อไปนี้ - displayX = (x - minX) * displayWidth / (maxX - minX + 1) displayY = (y - minY) * displayHeight / (maxY - minY + 1)- หน้าจอสัมผัสอาจรายงานการสัมผัสนอกพื้นที่ใช้งานที่รายงาน - ระบบจะไม่ส่งการแตะที่เริ่มต้นนอกพื้นที่ใช้งานไปยังแอป แต่สามารถใช้กับการกดปุ่มเสมือนได้ - ระบบจะส่งการแตะที่เริ่มต้นภายในพื้นที่ใช้งาน หรือที่เข้าและออกจากพื้นที่แสดงผล ไปยังแอป ดังนั้น หากการแตะเริ่มต้นภายใน ขอบเขตของแอป แล้วย้ายออกนอกพื้นที่ใช้งาน แอป อาจได้รับเหตุการณ์การแตะที่มีพิกัดการแสดงผลเป็นค่าลบหรืออยู่นอก ขอบเขตของการแสดงผล ซึ่งเป็นลักษณะการทำงานที่คาดไว้อยู่แล้ว - อุปกรณ์สัมผัสไม่ควรจำกัดพิกัดการสัมผัสไว้ที่ขอบเขตของพื้นที่ที่ใช้งานอยู่ หากการแตะออกจากพื้นที่ใช้งาน ระบบควรรายงานว่าการแตะอยู่นอกพื้นที่ใช้งาน หรือไม่ควรรายงานเลย - ตัวอย่างเช่น หากนิ้วของผู้ใช้แตะใกล้มุมซ้ายบนของหน้าจอสัมผัส ระบบอาจรายงานพิกัดเป็น (minX, minY) หากนิ้วยังคง เคลื่อนที่ออกไปนอกพื้นที่ใช้งานต่อไป หน้าจอสัมผัสควรเริ่ม รายงานพิกัดที่มีคอมโพเนนต์น้อยกว่า minX และ minY เช่น (minX - 2, minY - 3) หรือควรหยุดรายงานการสัมผัสโดยสิ้นเชิง กล่าวคือ หน้าจอสัมผัสไม่ควรรายงาน (minX, minY) เมื่อผู้ใช้นิ้วสัมผัสนอกพื้นที่ใช้งานจริง - การยึดพิกัดการสัมผัสกับขอบจอแสดงผลจะสร้างขอบเขตที่ชัดเจนเทียม รอบขอบหน้าจอ ซึ่งจะทำให้ระบบติดตามการเคลื่อนไหวที่เข้าหรือออกจากขอบเขตของพื้นที่แสดงผลได้อย่างราบรื่น 
- ค่าที่รายงานโดย - ABS_PRESSUREหรือ- ABS_MT_PRESSURE(หากมีการรายงาน) ต้องไม่ใช่ 0 เมื่อเครื่องมือสัมผัสอุปกรณ์ และเป็น 0 ในกรณีอื่นๆ เพื่อระบุว่าเครื่องมือวางอยู่เหนืออุปกรณ์- การรายงานข้อมูลแรงดันเป็นตัวเลือกที่ไม่บังคับ แต่เราขอแนะนำเป็นอย่างยิ่ง แอปสามารถใช้ข้อมูลความดันเพื่อใช้การวาดภาพที่ไวต่อแรงกด และเอฟเฟกต์อื่นๆ 
- ค่าที่รายงานโดย - ABS_TOOL_WIDTH,- ABS_MT_TOUCH_MAJOR,- ABS_MT_TOUCH_MINOR,- ABS_MT_WIDTH_MAJORหรือ- ABS_MT_WIDTH_MINORควรเป็นค่าที่ไม่ใช่ 0 เมื่อเครื่องมือ สัมผัสอุปกรณ์ และเป็น 0 ในกรณีอื่นๆ แต่ไม่จำเป็นต้องเป็นเช่นนั้น ตัวอย่างเช่น อุปกรณ์ระบบสัมผัสอาจวัดขนาดของการสัมผัสด้วยนิ้วได้ แต่ไม่สามารถวัดการสัมผัสด้วยสไตลัสได้- การรายงานข้อมูลขนาดเป็นไม่บังคับ แต่เราขอแนะนำเป็นอย่างยิ่ง แอปสามารถใช้ข้อมูลแรงดันเพื่อใช้การวาดภาพที่ไวต่อขนาด และเอฟเฟกต์อื่นๆ 
- ค่าที่รายงานโดย - ABS_DISTANCEหรือ- ABS_MT_DISTANCEควร เข้าใกล้ 0 เมื่อเครื่องมือสัมผัสอุปกรณ์ ระยะทางอาจไม่เป็นศูนย์ แม้ว่าเครื่องมือจะสัมผัสโดยตรงก็ตาม ค่าที่แน่นอนที่รายงานจะขึ้นอยู่กับ วิธีที่ฮาร์ดแวร์วัดระยะทาง- การรายงานข้อมูลระยะทางเป็นไม่บังคับ แต่แนะนำสำหรับ อุปกรณ์สไตลัส 
- ค่าที่รายงานโดย - ABS_TILT_Xและ- ABS_TILT_Yควรเป็น 0 เมื่อเครื่องมือตั้งฉากกับอุปกรณ์ การเอียงที่ไม่ใช่ 0 แสดงว่า ถือเครื่องมือในแนวเอียง- ระบบจะถือว่ามุมเอียงตามแกน X และ Y ระบุเป็นองศา จากแนวตั้งฉาก จุดกึ่งกลาง (ตั้งฉากอย่างสมบูรณ์) จะกำหนดโดย - (max + min) / 2สำหรับแต่ละแกน ค่าที่น้อยกว่าจุดกึ่งกลาง แสดงถึงการเอียงขึ้นหรือไปทางซ้าย ค่าที่มากกว่าจุดกึ่งกลาง แสดงถึงการเอียงลงหรือไปทางขวา- InputReaderจะแปลงองค์ประกอบการเอียง X และ Y เป็นมุมเอียงตั้งฉาก ซึ่งมีค่าตั้งแต่ 0 ถึง- PI / 2เรเดียน และมุมการวางแนวระนาบ ซึ่งมีค่าตั้งแต่- -PIถึง- PIเรเดียน การแสดงนี้ส่งผลให้มี คำอธิบายการวางแนวที่เข้ากันได้กับสิ่งที่ใช้เพื่ออธิบาย การแตะด้วยนิ้ว- การรายงานข้อมูลการเอียงเป็นไม่บังคับ แต่แนะนำสำหรับอุปกรณ์สไตลัส 
- หาก - ABS_MT_TOOL_TYPEรายงานประเภทเครื่องมือ ระบบจะแทนที่ข้อมูลประเภทเครื่องมือที่- BTN_TOOL_*รายงาน หากไม่มีข้อมูลประเภทเครื่องมือเลย ประเภทเครื่องมือจะมีค่าเริ่มต้นเป็น- MotionEvent.TOOL_TYPE_FINGER
- ระบบจะพิจารณาว่าเครื่องมือทำงานอยู่ตามเงื่อนไขต่อไปนี้ - เมื่อใช้โปรโตคอลแบบสัมผัสเดียว เครื่องมือจะทำงานหาก - BTN_TOUCH, หรือ- BTN_TOOL_*เป็น 1- เงื่อนไขนี้หมายความว่า - InputReaderต้องมีข้อมูลเกี่ยวกับลักษณะของเครื่องมืออย่างน้อยบางส่วน ไม่ว่าจะเป็นการสัมผัสหรือไม่ หรืออย่างน้อยก็ประเภทของเครื่องมือ หากไม่มีข้อมูล ระบบจะถือว่าเครื่องมือไม่ได้ใช้งาน (อยู่นอกช่วง)
- เมื่อใช้โปรโตคอลมัลติทัช "A" เครื่องมือจะทำงานทุกครั้งที่ปรากฏในรายงานการซิงค์ล่าสุด เมื่อเครื่องมือไม่ปรากฏในรายงานการซิงค์อีกต่อไป ก็หมายความว่าเครื่องมือดังกล่าวจะไม่มีอยู่แล้ว
- เมื่อใช้โปรโตคอลมัลติทัช "B" เครื่องมือจะทำงานตราบใดที่ มีช่องที่ใช้งานอยู่ เมื่อล้างข้อมูลในช่องแล้ว เครื่องมือจะหายไป
 
- ระบบจะพิจารณาว่าเครื่องมือลอยอยู่ตามเงื่อนไขต่อไปนี้
 - หากเครื่องมือเป็น BTN_TOOL_MOUSEหรือBTN_TOOL_LENSแสดงว่าเครื่องมือ ไม่ได้วางเมาส์อยู่ แม้ว่าเงื่อนไขต่อไปนี้จะเป็นจริงก็ตาม
- หากเครื่องมือทำงานอยู่และคนขับรายงานข้อมูลแรงดัน และแรงดันที่รายงานเป็น 0 แสดงว่าเครื่องมือลอยอยู่
- หากเครื่องมือทำงานอยู่และไดรเวอร์รองรับรหัสคีย์ BTN_TOUCHและBTN_TOUCHมีค่าเป็น 0 แสดงว่าเครื่องมือลอยอยู่
 
- หากเครื่องมือเป็น 
- InputReaderรองรับทั้งโปรโตคอลมัลติทัช "A" และ "B" ผู้ขับขี่ใหม่ ควรใช้โปรโตคอล "B" แต่จะใช้โปรโตคอลใดก็ได้
- ตั้งแต่ Android 4.0 เป็นต้นไป อาจต้องเปลี่ยนไดรเวอร์หน้าจอสัมผัส เพื่อให้เป็นไปตามข้อกำหนดของโปรโตคอลอินพุตของ Linux - คุณอาจต้องทำการเปลี่ยนแปลงต่อไปนี้ - เมื่อเครื่องมือไม่มีการใช้งาน (นิ้ว "ขึ้น") เครื่องมือควรหยุดปรากฏในรายงานการซิงค์แบบมัลติทัชที่ตามมา เมื่อเครื่องมือทั้งหมดไม่ได้ใช้งาน (นิ้วทั้งหมด "ชี้ขึ้น") ไดรเวอร์ควรส่งแพ็กเก็ตรายงานการซิงค์ที่ว่างเปล่า เช่น - SYN_MT_REPORTตามด้วย- SYN_REPORT- Android เวอร์ชันก่อนหน้าคาดหวังให้รายงานเหตุการณ์ "ขึ้น" โดยการส่ง ค่าแรงดันเป็น 0 ลักษณะการทำงานแบบเดิมไม่สอดคล้องกับ ข้อกำหนดโปรโตคอลอินพุตของ Linux และระบบไม่รองรับอีกต่อไป 
- ควรรายงานข้อมูลแรงกดดันทางกายภาพหรือความแรงของสัญญาณโดยใช้ - ABS_MT_PRESSURE- Android เวอร์ชันก่อนหน้าจะดึงข้อมูลแรงดันจาก - ABS_MT_TOUCH_MAJORลักษณะการทำงานแบบเดิมไม่สอดคล้องกับ ข้อกำหนดโปรโตคอลอินพุตของ Linux และระบบไม่รองรับอีกต่อไป
- ควรรายงานข้อมูลขนาดการแตะโดยใช้ ABS_MT_TOUCH_MAJORAndroid เวอร์ชันก่อนหน้าจะดึงข้อมูลขนาดจาก ABS_MT_TOOL_MAJORลักษณะการทำงานแบบเดิมไม่สอดคล้องกับ ข้อกำหนดโปรโตคอลอินพุตของ Linux และระบบไม่รองรับอีกต่อไป
 
การทำงานของอุปกรณ์ระบบสัมผัส
ต่อไปนี้เป็นข้อมูลสรุปสั้นๆ เกี่ยวกับการทำงานของอุปกรณ์ระบบสัมผัสใน Android
- EventHubอ่านเหตุการณ์ดิบจากไดรเวอร์- evdev
- InputReaderจะใช้เหตุการณ์ดิบและอัปเดตสถานะภายในเกี่ยวกับ ตำแหน่งและลักษณะอื่นๆ ของเครื่องมือแต่ละอย่าง และยังติดตามสถานะปุ่มด้วย
- หากมีการกดหรือปล่อยปุ่มย้อนกลับหรือไปข้างหน้า
    InputReaderจะแจ้งให้InputDispatcherทราบเกี่ยวกับเหตุการณ์สำคัญ
- InputReaderจะกำหนดว่ามีการกดแป้นเสมือนหรือไม่ หากเป็นเช่นนั้น ระบบจะแจ้งให้- InputDispatcherทราบเกี่ยวกับเหตุการณ์สำคัญ
- InputReaderจะกำหนดว่าการแตะเริ่มต้นภายในขอบเขตของจอแสดงผลหรือไม่ หากเป็นเช่นนั้น ระบบจะแจ้งให้- InputDispatcherทราบเกี่ยวกับ เหตุการณ์การแตะ
- หากไม่มีเครื่องมือสัมผัส แต่มีเครื่องมือวางเมาส์อย่างน้อย 1 รายการ
    InputReaderจะแจ้งให้InputDispatcherทราบเกี่ยวกับเหตุการณ์วางเมาส์
- หากประเภทอุปกรณ์สัมผัสเป็นเคอร์เซอร์ InputReaderจะตรวจหาท่าทางสัมผัสของเคอร์เซอร์ ย้ายเคอร์เซอร์และจุดตามนั้น แล้วแจ้งInputDispatcherเกี่ยวกับเหตุการณ์ของเคอร์เซอร์
- InputDispatcherใช้- WindowManagerPolicyเพื่อพิจารณาว่า ควรส่งเหตุการณ์หรือไม่ และควรปลุกอุปกรณ์หรือไม่ จากนั้น- InputDispatcherจะส่งเหตุการณ์ไปยังแอปที่เหมาะสม
การกำหนดค่าอุปกรณ์ระบบสัมผัส
ลักษณะการทำงานของอุปกรณ์สัมผัสจะกำหนดโดยแกน ปุ่ม คุณสมบัติอินพุต การกำหนดค่าอุปกรณ์อินพุต แผนที่คีย์เสมือน และเลย์เอาต์แป้น
ดูรายละเอียดเพิ่มเติมเกี่ยวกับไฟล์ที่ ใช้ในการกำหนดค่าแป้นพิมพ์ได้ในส่วนต่อไปนี้
คุณสมบัติ
ระบบใช้พร็อพเพอร์ตี้การกำหนดค่าอุปกรณ์อินพุตหลายอย่างเพื่อกำหนดค่า และปรับเทียบลักษณะการทำงานของอุปกรณ์ระบบสัมผัส
สาเหตุหนึ่งที่ทำให้เกิดปัญหานี้คือไดรเวอร์อุปกรณ์สำหรับอุปกรณ์ระบบสัมผัสมักรายงาน ลักษณะของการสัมผัสโดยใช้หน่วยเฉพาะของอุปกรณ์
ตัวอย่างเช่น อุปกรณ์ระบบสัมผัสจำนวนมากจะวัดพื้นที่สัมผัส โดยใช้มาตราส่วนภายในที่เฉพาะเจาะจงของอุปกรณ์ เช่น จำนวน โหนดเซ็นเซอร์ทั้งหมดที่ทริกเกอร์โดยการสัมผัส ค่าขนาดดิบนี้จะ ไม่มีความหมายต่อแอปเนื่องจากแอปจะต้องทราบเกี่ยวกับ ขนาดทางกายภาพและลักษณะอื่นๆ ของโหนดเซ็นเซอร์อุปกรณ์สัมผัส
ระบบใช้พารามิเตอร์การปรับเทียบที่เข้ารหัสไว้ในการกำหนดค่าอุปกรณ์อินพุต เพื่อถอดรหัส แปลง และทําให้ค่าที่รายงานโดยอุปกรณ์สัมผัส เป็นรูปแบบมาตรฐานที่ง่ายขึ้นซึ่งแอปเข้าใจได้
รูปแบบเอกสารประกอบ
เพื่อวัตถุประสงค์ในการจัดทำเอกสาร เราใช้รูปแบบต่อไปนี้เพื่ออธิบาย ค่าที่ระบบใช้ในกระบวนการปรับเทียบ
ค่าแกนดิบ
นิพจน์ต่อไปนี้แสดงค่าดิบที่รายงานโดยไดรเวอร์อุปกรณ์สัมผัสเป็นเหตุการณ์ EV_ABS
- raw.x
- ค่าของแกน ABS_XหรือABS_MT_POSITION_X
- raw.y
- ค่าของแกน ABS_YหรือABS_MT_POSITION_Y
- raw.pressure
- ค่าของแกน ABS_PRESSUREหรือABS_MT_PRESSUREหรือ 0 หาก ไม่พร้อมใช้งาน
- raw.touchMajor
- ค่าของแกน ABS_MT_TOUCH_MAJORหรือ 0 หากไม่มี
- raw.touchMinor
- ค่าของแกน ABS_MT_TOUCH_MINORหรือraw.touchMajorหาก ไม่พร้อมใช้งาน
- raw.toolMajor
- ค่าของแกน ABS_TOOL_WIDTHหรือABS_MT_WIDTH_MAJORหรือ 0 หาก ไม่พร้อมใช้งาน
- raw.toolMinor
- ค่าของแกน ABS_MT_WIDTH_MINORหรือraw.toolMajorหากไม่มี
- raw.orientation
- ค่าของแกน ABS_MT_ORIENTATIONหรือ 0 หากไม่มี
- raw.distance
- ค่าของแกน ABS_DISTANCEหรือABS_MT_DISTANCEหรือ 0 หาก ไม่พร้อมใช้งาน
- raw.tiltX
- ค่าของแกน ABS_TILT_Xหรือ 0 หากไม่มี
- raw.tiltY
- ค่าของแกน ABS_TILT_Yหรือ 0 หากไม่มี
ช่วงแกนดิบ
นิพจน์ต่อไปนี้แสดงขอบเขตของค่าดิบ โดยจะได้รับ
จากการเรียก EVIOCGABS ioctl สำหรับแต่ละแกน
- raw.*.min
- ค่าต่ำสุดแบบรวมของแกนดิบ
- raw.*.max
- ค่าสูงสุดแบบรวมของแกนดิบ
- raw.*.range
- เทียบเท่ากับ raw.*.max - raw.*.min
- raw.*.fuzz
- ความแม่นยำของแกนดิบ เช่น fuzz = 1 หมายความว่าค่ามีความแม่นยำถึง +/- 1 หน่วย
- raw.width
- ความกว้างแบบรวมของพื้นที่สัมผัส ซึ่งเทียบเท่ากับ raw.x.range + 1
- raw.height
- ความสูงแบบรวมของพื้นที่สัมผัส ซึ่งเทียบเท่ากับ raw.y.range + 1
ช่วงเอาต์พุต
นิพจน์ต่อไปนี้แสดงลักษณะของระบบพิกัดเอาต์พุต ระบบจะใช้การประมาณเชิงเส้นเพื่อแปลข้อมูลตำแหน่งการแตะจาก หน่วยพื้นผิวที่อุปกรณ์สัมผัสใช้เป็นหน่วยเอาต์พุตที่ รายงานไปยังแอป เช่น พิกเซลของจอแสดงผล
- output.width
- ความกว้างของเอาต์พุต สำหรับหน้าจอสัมผัส (ที่เชื่อมโยงกับจอแสดงผล) นี่คือความกว้างของจอแสดงผลเป็นพิกเซล สำหรับทัชแพด (ไม่ได้เชื่อมโยงกับจอแสดงผล)
ความกว้างของเอาต์พุตจะเท่ากับ raw.widthซึ่งบ่งบอกว่าไม่มีการประมาณค่า
- output.height
- ความสูงของเอาต์พุต สำหรับหน้าจอสัมผัส (เชื่อมโยงกับจอแสดงผล) ค่านี้
คือความสูงของจอแสดงผลเป็นพิกเซล สำหรับทัชแพด (ไม่ได้เชื่อมโยงกับจอแสดงผล)
ความสูงของเอาต์พุตจะเท่ากับ raw.heightซึ่งบ่งบอกว่าไม่มีการ ประมาณค่า
- output.diag
- ความยาวเส้นทแยงมุมของระบบพิกัดเอาต์พุต ซึ่งเทียบเท่ากับ
sqrt(output.width ^2 + output.height ^2)
การกำหนดค่าพื้นฐาน
โปรแกรมแมปอินพุตแบบสัมผัสใช้พร็อพเพอร์ตี้การกำหนดค่าหลายรายการในไฟล์การกำหนดค่าอุปกรณ์อินพุตเพื่อระบุค่าการปรับเทียบ ตารางต่อไปนี้อธิบาย พร็อพเพอร์ตี้การกำหนดค่าอเนกประสงค์บางอย่าง พร็อพเพอร์ตี้อื่นๆ ทั้งหมดจะอธิบายไว้ ในส่วนต่อไปนี้พร้อมกับฟิลด์ที่ใช้ในการปรับเทียบ
touch.deviceType
คำจำกัดความ: touch.deviceType = touchScreen |
    touchPad | pointer | default
ระบุประเภทอุปกรณ์สัมผัส
- 
หากค่าเป็น touchScreenแสดงว่าอุปกรณ์สัมผัสเป็นหน้าจอสัมผัสที่เชื่อมโยง กับจอแสดงผล
- 
หากค่าเป็น touchPadแสดงว่าอุปกรณ์สัมผัสเป็นทัชแพดที่ไม่ได้เชื่อมโยง กับจอแสดงผล
- 
หากค่าเป็น pointerแสดงว่าอุปกรณ์สัมผัสเป็นทัชแพดที่ไม่ได้เชื่อมโยง กับจอแสดงผล และจะใช้การเคลื่อนไหวของทัชแพดสำหรับ ท่าทางสัมผัสแบบมัลติทัชแบบอ้อม
- 
หากค่าเป็น defaultระบบจะตรวจหาประเภทอุปกรณ์โดยอัตโนมัติ ตามอัลกอริทึมการจัดประเภท
ดูรายละเอียดเพิ่มเติมเกี่ยวกับวิธีที่ประเภทอุปกรณ์มีผลต่อลักษณะการทำงานของอุปกรณ์ระบบสัมผัสได้ที่ส่วนการจัดประเภท
ใน Android 3 และต่ำกว่า ระบบจะถือว่าอุปกรณ์สัมผัสทั้งหมดเป็นหน้าจอสัมผัส
touch.orientationAware
คำจำกัดความ: touch.orientationAware = 0 | 1
ระบุว่าอุปกรณ์สัมผัสควรตอบสนองต่อการเปลี่ยนแปลงการวางแนวการแสดงผลหรือไม่
- 
หากค่าเป็น 1ระบบจะหมุนตำแหน่งสัมผัสที่อุปกรณ์สัมผัสรายงาน เมื่อใดก็ตามที่การวางแนวของจอแสดงผลเปลี่ยนแปลง
- 
หากค่าเป็น 0ตำแหน่งสัมผัสที่อุปกรณ์สัมผัสรายงานจะไม่ได้รับผลกระทบ จากการเปลี่ยนแปลงการวางแนวการแสดงผล
ค่าเริ่มต้นคือ 1 หากอุปกรณ์เป็นหน้าจอสัมผัส หรือ 0
    หากไม่ใช่
ระบบจะแยกความแตกต่างระหว่างหน้าจอสัมผัสและจอแสดงผลภายในและภายนอก หน้าจอสัมผัสภายในที่รับรู้การวางแนวจะหมุนตามการวางแนว ของจอแสดงผลภายใน ระบบจะหมุนหน้าจอสัมผัสภายนอกที่รับรู้การวางแนว ตามการวางแนวของจอแสดงผลภายนอก
การรับรู้การวางแนวใช้เพื่อรองรับการหมุนหน้าจอสัมผัสในอุปกรณ์ เช่น Nexus One ตัวอย่างเช่น เมื่อหมุนอุปกรณ์ตามเข็มนาฬิกา 90 องศา จากแนวตั้งปกติ ระบบจะแมปตำแหน่งสัมบูรณ์ของการสัมผัสใหม่ เพื่อให้ระบบรายงานการสัมผัสที่มุมซ้ายบนของระบบพิกัดสัมบูรณ์ของหน้าจอสัมผัส เป็นการสัมผัสที่มุมซ้ายบนของระบบพิกัดที่หมุนของจอแสดงผล การดำเนินการนี้จะช่วยให้ระบบรายงานการแตะด้วยระบบพิกัดเดียวกันกับที่แอปใช้ในการวาดองค์ประกอบภาพ
ก่อน Honeycomb ระบบจะถือว่าอุปกรณ์ระบบสัมผัสทั้งหมดรับรู้การวางแนว
touch.gestureMode
คำจำกัดความ: touch.gestureMode = pointer | spots |
    default
ระบุโหมดการนำเสนอสำหรับท่าทางสัมผัสของเคอร์เซอร์ พร็อพเพอร์ตี้การกำหนดค่านี้ จะเกี่ยวข้องเฉพาะเมื่ออุปกรณ์สัมผัสเป็นประเภทพอยน์เตอร์
- 
หากค่าเป็น pointerระบบจะแสดงท่าทางสัมผัสบนทัชแพดผ่านเคอร์เซอร์ คล้ายกับเคอร์เซอร์ของเมาส์
- 
หากค่าเป็น spotsระบบจะแสดงท่าทางสัมผัสบนทัชแพดด้วย Anchor ที่แสดงถึงจุดศูนย์กลางของท่าทางสัมผัสและชุดจุดวงกลม ที่แสดงถึงตำแหน่งของนิ้วแต่ละนิ้ว
ค่าเริ่มต้นคือ pointer เมื่อตั้งค่าพร็อพเพอร์ตี้อินพุต INPUT_PROP_SEMI_MT หรือ spots ในกรณีอื่นๆ
ฟิลด์ X และ Y
ฟิลด์ X และ Y ให้ข้อมูลตำแหน่งสำหรับกึ่งกลางของพื้นที่สัมผัส
การคำนวณ
การคำนวณนั้นตรงไปตรงมา โดยจะมีการประมาณค่าเชิงเส้นของข้อมูลตำแหน่งจากไดรเวอร์การสัมผัสไปยังระบบพิกัดเอาต์พุต
xScale = output.width / raw.width
yScale = output.height / raw.height
If not orientation aware or screen rotation is 0 degrees:
output.x = (raw.x - raw.x.min) * xScale
output.y = (raw.y - raw.y.min) * yScale
Else If rotation is 90 degrees:
    output.x = (raw.y - raw.y.min) * yScale
    output.y = (raw.x.max - raw.x) * xScale
Else If rotation is 180 degrees:
    output.x = (raw.x.max - raw.x) * xScale
    output.y = (raw.y.max - raw.y) * yScale
Else If rotation is 270 degrees:
    output.x = (raw.y.max - raw.y) * yScale
    output.y = (raw.x - raw.x.min) * xScale
End If
ฟิลด์ touchMajor, touchMinor, toolMajor, toolMinor, size
ฟิลด์ touchMajor และ touchMinor อธิบายขนาดโดยประมาณ
ของพื้นที่สัมผัสในหน่วยเอาต์พุต (พิกเซล)
ฟิลด์ toolMajor และ toolMinor อธิบายขนาดโดยประมาณ
ของเครื่องมือเองในหน่วยเอาต์พุต (พิกเซล)
ฟิลด์ size อธิบายขนาดที่ปรับแล้วของการสัมผัสที่สัมพันธ์กับ
การสัมผัสที่ใหญ่ที่สุดเท่าที่จะเป็นไปได้ซึ่งอุปกรณ์สัมผัสตรวจจับได้ ขนาดที่เล็กที่สุด
ที่เป็นไปได้ซึ่งได้รับการปรับให้เป็นมาตรฐานคือ 0.0 (ไม่มีการสัมผัสหรือวัดไม่ได้) และขนาดที่ใหญ่ที่สุด
ที่เป็นไปได้ซึ่งได้รับการปรับให้เป็นมาตรฐานคือ 1.0 (พื้นที่เซ็นเซอร์อิ่มตัว)
เมื่อวัดได้ทั้งความยาวและความกว้างโดยประมาณ touchMajorฟิลด์
จะระบุขนาดที่ยาวกว่า และฟิลด์touchMinorจะระบุขนาดที่สั้นกว่า
ของพื้นที่สัมผัส เมื่อวัดได้เพียงเส้นผ่านศูนย์กลางโดยประมาณของพื้นที่สัมผัส
ฟิลด์ touchMajor และ touchMinor จะเท่ากัน
ในทำนองเดียวกัน ฟิลด์ toolMajor จะระบุขนาดที่ยาวกว่า และฟิลด์ toolMinor จะระบุขนาดที่สั้นกว่าของพื้นที่หน้าตัดของเครื่องมือ
หากขนาดการแตะไม่พร้อมใช้งาน แต่ขนาดเครื่องมือพร้อมใช้งาน ระบบจะตั้งค่าขนาดเครื่องมือ ให้เท่ากับขนาดการแตะ ในทางกลับกัน หากขนาดเครื่องมือไม่พร้อมใช้งาน แต่ขนาดการแตะพร้อมใช้งาน ระบบจะตั้งค่าขนาดการแตะให้เท่ากับขนาดเครื่องมือ
อุปกรณ์ระบบสัมผัสจะวัดหรือรายงานขนาดการสัมผัสและขนาดเครื่องมือได้หลายวิธี การใช้งานปัจจุบันรองรับการวัด 3 ประเภท ได้แก่ เส้นผ่านศูนย์กลาง พื้นที่ และกล่องขอบเขตทางเรขาคณิตในหน่วยพื้นผิว
คำจำกัดความ: touch.size.calibration = none |
    geometric | diameter
| area | default
ระบุประเภทการวัดที่ใช้โดยไดรเวอร์การสัมผัสเพื่อรายงาน ขนาดการสัมผัสและขนาดเครื่องมือ
- 
หากค่าเป็น noneระบบจะตั้งค่าขนาดเป็น 0
- 
หากค่าเป็น geometricระบบจะถือว่าขนาดระบุในหน่วยพื้นผิวเดียวกันกับตำแหน่ง จึงจะปรับขนาดในลักษณะเดียวกัน
- 
หากค่าเป็น diameterระบบจะถือว่าขนาดเป็นสัดส่วนกับ เส้นผ่านศูนย์กลาง (ความกว้าง) ของการแตะหรือเครื่องมือ
- 
หากค่าเป็น areaระบบจะถือว่าขนาดเป็นสัดส่วนกับพื้นที่ของการแตะหรือเครื่องมือ
- 
หากค่าเป็น defaultระบบจะใช้การปรับเทียบgeometricหากมีแกนraw.touchMajorหรือraw.toolMajorไม่เช่นนั้นระบบจะใช้การปรับเทียบnone
touch.size.scale
คำจำกัดความ: touch.size.scale = <ตัวเลขทศนิยมที่ไม่เป็นลบ>
ระบุตัวคูณมาตราส่วนคงที่ที่ใช้ในการปรับเทียบ
ค่าเริ่มต้นคือ 1.0
touch.size.bias
คำจำกัดความ: touch.size.bias = <ตัวเลขทศนิยมที่ไม่เป็นลบ>
ระบุค่าอคติคงที่ที่ใช้ในการปรับเทียบ
ค่าเริ่มต้นคือ 0.0
touch.size.isSummed
คำจำกัดความ: touch.size.isSummed = 0 | 1
ระบุว่าจะรายงานขนาดเป็นผลรวมของขนาดของรายชื่อติดต่อที่ใช้งานอยู่ทั้งหมด หรือจะรายงานแยกกันสำหรับรายชื่อติดต่อแต่ละรายการ
- 
หากค่าเป็น 1ระบบจะหารขนาดที่รายงานด้วยจำนวน รายชื่อติดต่อก่อนใช้งาน
- 
หากค่าเป็น 0ระบบจะใช้ขนาดที่รายงานตามที่เป็น
ค่าเริ่มต้นคือ 0
อุปกรณ์ระบบสัมผัสบางรุ่น โดยเฉพาะอุปกรณ์ "Semi-MT" จะแยกแยะ
มิติข้อมูลแต่ละรายการของการสัมผัสหลายครั้งไม่ได้ จึงรายงานการวัดขนาด
ที่แสดงถึงพื้นที่ทั้งหมดหรือความกว้าง คุณควรตั้งค่าพร็อพเพอร์ตี้นี้เป็น
1 สำหรับอุปกรณ์ดังกล่าวเท่านั้น หากไม่แน่ใจ ให้ตั้งค่านี้เป็น 0
การคำนวณ
การคำนวณฟิลด์ touchMajor, touchMinor, toolMajor,
    toolMinor
 และ size ขึ้นอยู่กับพารามิเตอร์การปรับเทียบที่ระบุ
If raw.touchMajor and raw.toolMajor are available:
    touchMajor = raw.touchMajor
    touchMinor = raw.touchMinor
    toolMajor = raw.toolMajor
    toolMinor = raw.toolMinor
Else If raw.touchMajor is available:
    toolMajor = touchMajor = raw.touchMajor
    toolMinor = touchMinor = raw.touchMinor
Else If raw.toolMajor is available:
    touchMajor = toolMajor = raw.toolMajor
    touchMinor = toolMinor = raw.toolMinor
Else
    touchMajor = toolMajor = 0
    touchMinor = toolMinor = 0
    size = 0
End If
size = avg(touchMajor, touchMinor)
If touch.size.isSummed == 1:
    touchMajor = touchMajor / numberOfActiveContacts
    touchMinor = touchMinor / numberOfActiveContacts
    toolMajor = toolMajor / numberOfActiveContacts
    toolMinor = toolMinor / numberOfActiveContacts
    size = size / numberOfActiveContacts
End If
If touch.size.calibration == "none":
    touchMajor = toolMajor = 0
    touchMinor = toolMinor = 0
    size = 0
Else If touch.size.calibration == "geometric":
    outputScale = average(output.width / raw.width, output.height / raw.height)
    touchMajor = touchMajor * outputScale
    touchMinor = touchMinor * outputScale
    toolMajor = toolMajor * outputScale
    toolMinor = toolMinor * outputScale
Else If touch.size.calibration == "area":
    touchMajor = sqrt(touchMajor)
    touchMinor = touchMajor
    toolMajor = sqrt(toolMajor)
    toolMinor = toolMajor
Else If touch.size.calibration == "diameter":
    touchMinor = touchMajor
    toolMinor = toolMajor
End If
If touchMajor != 0:
    output.touchMajor = touchMajor * touch.size.scale + touch.size.bias
Else
    output.touchMajor = 0
End If
If touchMinor != 0:
    output.touchMinor = touchMinor * touch.size.scale + touch.size.bias
Else
    output.touchMinor = 0
End If
If toolMajor != 0:
    output.toolMajor = toolMajor * touch.size.scale + touch.size.bias
Else
    output.toolMajor = 0
End If
If toolMinor != 0:
    output.toolMinor = toolMinor * touch.size.scale + touch.size.bias
Else
    output.toolMinor = 0
End If
output.size = size
ฟิลด์ความดัน
ฟิลด์ pressure อธิบายแรงกดทางกายภาพโดยประมาณที่ใช้กับ
อุปกรณ์ระบบสัมผัสเป็นค่าที่ปรับให้เป็นค่าปกติระหว่าง 0.0 (ไม่มีการสัมผัส) ถึง 1.0 (แรงกดปกติ)
แรงกดเป็น 0 แสดงว่าเครื่องมือลอยอยู่
touch.pressure.calibration
คำจำกัดความ: touch.pressure.calibration = none |
    physical | amplitude | default
ระบุประเภทการวัดที่ไดรเวอร์การสัมผัสใช้เพื่อรายงานแรงกด
- 
หากค่าเป็น noneแสดงว่าไม่ทราบแรงกด จึงตั้งค่าเป็น 1.0 เมื่อ แตะและ 0.0 เมื่อวางเมาส์
- 
หากค่าเป็น physicalระบบจะถือว่าแกนแรงดันวัดความเข้มทางกายภาพที่แท้จริงของแรงดันที่ใช้กับทัชแพด
- 
หากค่าเป็น amplitudeระบบจะถือว่าแกนแรงดันวัดแอมพลิจูดของสัญญาณ ซึ่งเกี่ยวข้องกับขนาดของการสัมผัสและแรงดันที่ใช้
- 
หากค่าเป็น defaultระบบจะใช้การปรับเทียบphysicalหากมีแกนแรงดัน ไม่เช่นนั้นจะใช้none
touch.pressure.scale
คำจำกัดความ: touch.pressure.scale = <ตัวเลขทศนิยมที่ไม่เป็นลบ>
ระบุตัวคูณมาตราส่วนคงที่ที่ใช้ในการปรับเทียบ
ค่าเริ่มต้นคือ 1.0 / raw.pressure.max
การคำนวณ
การคำนวณฟิลด์ pressure จะขึ้นอยู่กับพารามิเตอร์การปรับเทียบที่ระบุ
If touch.pressure.calibration == "physical" or "amplitude":
    output.pressure = raw.pressure * touch.pressure.scale
Else
    If hovering:
        output.pressure = 0
    Else
        output.pressure = 1
    End If
End If
ฟิลด์การวางแนวและการเอียง
ฟิลด์ orientation อธิบายการวางแนวของการสัมผัสและเครื่องมือเป็นการวัดเชิงมุม การวางแนว 0 แสดงว่าแกนหลักวางแนวตั้ง
-PI/2 แสดงว่าแกนหลักวางแนวนอนไปทางซ้าย
PI/2 แสดงว่าแกนหลักวางแนวนอนไปทางขวา เมื่อมีเครื่องมือสไตลัส
 ช่วงการวางแนวจะอธิบายได้ในวงกลมเต็ม
จาก -PI หรือ PI
tilt ฟิลด์จะอธิบายความเอียงของเครื่องมือเป็นการวัดเชิงมุม
การเอียง 0 แสดงว่าเครื่องมือตั้งฉากกับพื้นผิว
การเอียง PI/2 แสดงว่าเครื่องมือวางราบกับพื้นผิว
touch.orientation.calibration
คำจำกัดความ: touch.orientation.calibration = none |
    interpolated | vector | default
ระบุประเภทการวัดที่ใช้โดยไดรเวอร์การสัมผัสเพื่อรายงานการวางแนว
- หากค่าเป็น noneแสดงว่าไม่ทราบการวางแนว จึงตั้งค่าเป็น 0
- หากค่าเป็น interpolatedระบบจะประมาณค่าการวางแนวเชิงเส้นเพื่อให้ค่าดิบraw.orientation.minแมปกับ-PI/2และค่าดิบraw.orientation.maxแมปกับPI/2ค่ากึ่งกลางของ(raw.orientation.min + raw.orientation.max) / 2จะแมปกับ0
- หากค่าเป็น vectorระบบจะตีความการวางแนวเป็นเวกเตอร์แบบแพ็กซึ่งประกอบด้วย ฟิลด์แบบมีเครื่องหมาย 4 บิต 2 ฟิลด์ การแสดงนี้ใช้ในชิ้นส่วนของ Atmel Object Based Protocol เมื่อถอดรหัสแล้ว เวกเตอร์จะให้มุมการวางแนวและความเชื่อมั่น ขนาด ระบบจะใช้ขนาดความเชื่อมั่นเพื่อปรับขนาดข้อมูล เว้นแต่จะเป็นข้อมูลทางเรขาคณิต
- หากค่าเป็น defaultระบบจะใช้การปรับเทียบinterpolatedหากมีแกนการวางแนว ไม่เช่นนั้นจะใช้none
การคำนวณ
การคำนวณฟิลด์ orientation และ tilt จะขึ้นอยู่กับ
พารามิเตอร์การปรับเทียบที่ระบุและอินพุตที่มี
If touch.tiltX and touch.tiltY are available:
    tiltXCenter = average(raw.tiltX.min, raw.tiltX.max)
    tiltYCenter = average(raw.tiltY.min, raw.tiltY.max)
    tiltXAngle = (raw.tiltX - tiltXCenter) * PI / 180
    tiltYAngle = (raw.tiltY - tiltYCenter) * PI / 180
    output.orientation = atan2(-sin(tiltXAngle), sinf(tiltYAngle))
    output.tilt = acos(cos(tiltXAngle) * cos(tiltYAngle))
Else If touch.orientation.calibration == "interpolated":
    center = average(raw.orientation.min, raw.orientation.max)
    output.orientation = PI / (raw.orientation.max - raw.orientation.min)
    output.tilt = 0
Else If touch.orientation.calibration == "vector":
    c1 = (raw.orientation & 0xF0) >> 4
    c2 = raw.orientation & 0x0F
    If c1 != 0 or c2 != 0:
        If c1 >= 8 Then c1 = c1 - 16
        If c2 >= 8 Then c2 = c2 - 16
        angle = atan2(c1, c2) / 2
        confidence = sqrt(c1*c1 + c2*c2)
        output.orientation = angle
        If touch.size.calibration == "diameter" or "area":
            scale = 1.0 + confidence / 16
            output.touchMajor *= scale
            output.touchMinor /= scale
            output.toolMajor *= scale
            output.toolMinor /= scale
        End If
    Else
        output.orientation = 0
    End If
    output.tilt = 0
Else
    output.orientation = 0
    output.tilt = 0
End If
If orientation aware:
    If screen rotation is 90 degrees:
        output.orientation = output.orientation - PI / 2
    Else If screen rotation is 270 degrees:
        output.orientation = output.orientation + PI / 2
    End If
End If
ฟิลด์ระยะทาง
ฟิลด์ distance จะอธิบายระยะห่างระหว่างเครื่องมือกับพื้นผิวของอุปกรณ์ระบบสัมผัส
 ค่า 0.0 แสดงถึงการสัมผัสโดยตรง และค่าที่มากขึ้นแสดงถึง
ระยะห่างจากพื้นผิวที่เพิ่มขึ้น
touch.distance.calibration
คำจำกัดความ: touch.distance.calibration = none |
    scaled | default
ระบุประเภทการวัดที่ไดรเวอร์การสัมผัสใช้เพื่อรายงานระยะทาง
- 
หากค่าเป็น noneแสดงว่าไม่ทราบระยะทาง จึงตั้งค่าเป็น 0
- 
หากค่าเป็น scaledระบบจะคูณระยะทางที่รายงานด้วย ค่าคงที่ของปัจจัยการปรับขนาด
- 
หากค่าเป็น defaultระบบจะใช้การปรับเทียบscaledหากมีแกนระยะทาง ไม่เช่นนั้นจะใช้none
touch.distance.scale
คำจำกัดความ: touch.distance.scale = <ตัวเลขทศนิยมที่ไม่เป็นลบ>
ระบุตัวคูณมาตราส่วนคงที่ที่ใช้ในการปรับเทียบ
ค่าเริ่มต้นคือ 1.0
การคำนวณ
การคำนวณฟิลด์ distance จะขึ้นอยู่กับพารามิเตอร์การปรับเทียบที่ระบุ
If touch.distance.calibration == "scaled":
    output.distance = raw.distance * touch.distance.scale
Else
    output.distance = 0
End If
ตัวอย่าง
# Input device configuration file for a touch screen that supports pressure, # size and orientation. The pressure and size scale factors were obtained # by measuring the characteristics of the device itself and deriving # useful approximations based on the resolution of the touch sensor and the # display. # # Note that these parameters are specific to a particular device model. # Different parameters need to be used for other devices. # Basic Parameters touch.deviceType = touchScreen touch.orientationAware = 1 # Size # Based on empirical measurements, we estimate the size of the contact # using size = sqrt(area) * 28 + 0. touch.size.calibration = area touch.size.scale = 28 touch.size.bias = 0 touch.size.isSummed = 0 # Pressure # Driver reports signal strength as pressure. # # A normal index finger touch typically registers about 80 signal strength # units although we don't expect these values to be accurate. touch.pressure.calibration = amplitude touch.pressure.scale = 0.0125 # Orientation touch.orientation.calibration = vector
หมายเหตุเกี่ยวกับความเข้ากันได้
พร็อพเพอร์ตี้การกำหนดค่าสำหรับอุปกรณ์ระบบสัมผัสมีการเปลี่ยนแปลงอย่างมากใน Android Ice Cream Sandwich 4.0 ต้องอัปเดตไฟล์การกำหนดค่าอุปกรณ์อินพุตทั้งหมดสำหรับอุปกรณ์ระบบสัมผัส เพื่อใช้พร็อพเพอร์ตี้การกำหนดค่าใหม่
นอกจากนี้ คุณอาจต้องอัปเดตไดรเวอร์ของอุปกรณ์ระบบสัมผัสรุ่นเก่าด้วย
ไฟล์คีย์แมปเสมือน
คุณใช้อุปกรณ์ระบบสัมผัสเพื่อใช้ปุ่มเสมือนได้
คุณทำได้หลายวิธีโดยขึ้นอยู่กับความสามารถของ ตัวควบคุมการสัมผัส คุณกำหนดค่าตัวควบคุมการสัมผัสบางอย่างได้โดยตรงเพื่อใช้ ปุ่มซอฟต์แวร์โดยการตั้งค่ารีจิสเตอร์เฟิร์มแวร์ ในบางครั้ง การแมปจากพิกัดสัมผัสไปยังรหัสแป้นในซอฟต์แวร์ก็เป็นสิ่งที่ต้องการ
เมื่อใช้คีย์เสมือนในซอฟต์แวร์ เคอร์เนลต้องส่งออกไฟล์แผนที่คีย์เสมือน
ชื่อ virtualkeys.<devicename> เป็นพร็อพเพอร์ตี้ของบอร์ด เช่น
หากไดรเวอร์อุปกรณ์หน้าจอสัมผัสรายงานชื่อเป็น "touchyfeely" แล้ว
ไฟล์แผนที่คีย์เสมือนต้องมีเส้นทาง
    /sys/board_properties/virtualkeys.touchyfeely
ไฟล์แผนที่คีย์เสมือนจะอธิบายพิกัดและรหัสคีย์ Linux ของคีย์เสมือน บนหน้าจอสัมผัส
นอกจากไฟล์แมปคีย์เสมือนแล้ว ยังต้องมีไฟล์เลย์เอาต์คีย์ที่เกี่ยวข้อง
และไฟล์แมปอักขระคีย์เพื่อแมปรหัสคีย์ Linux กับรหัสคีย์ Android และ
เพื่อระบุประเภทของอุปกรณ์แป้นพิมพ์ (โดยปกติคือ SPECIAL_FUNCTION)
วากยสัมพันธ์
ไฟล์แผนที่คีย์เสมือนคือไฟล์ข้อความธรรมดาที่ประกอบด้วยลำดับคำอธิบายเลย์เอาต์คีย์เสมือน ซึ่งคั่นด้วยบรรทัดใหม่หรือด้วยเครื่องหมายโคลอน
บรรทัดความคิดเห็นจะขึ้นต้นด้วย "#" และสิ้นสุดที่ท้ายบรรทัด
คีย์เสมือนแต่ละรายการอธิบายโดยคอมโพเนนต์ 6 รายการที่คั่นด้วยเครื่องหมายโคลอน ดังนี้
- 0x01: รหัสเวอร์ชัน ต้องเป็น- 0x01เสมอ
- <รหัสคีย์ Linux>: รหัสคีย์ Linux ของคีย์เสมือน
- <centerX>: พิกัด X ของพิกเซลตรงกลางของคีย์เสมือน
- <centerY>: พิกัด Y ของพิกเซลตรงกลางของคีย์เสมือน
- <width>: ความกว้างของปุ่มเสมือนในหน่วยพิกเซล
- <height>: ความสูงของปุ่มเสมือนในหน่วยพิกเซล
พิกัดและขนาดทั้งหมดจะระบุในแง่ของระบบพิกัดการแสดงผล
นี่คือไฟล์แผนที่คีย์เสมือนที่เขียนทั้งหมดในบรรทัดเดียว
# All on one line 0x01:158:55:835:90:55:0x01:139:172:835:125:55:0x01:102:298:835:115:55:0x01:217:412:835:95:55
นอกจากนี้ คุณยังเขียนไฟล์แมปคีย์เสมือนเดียวกันในหลายบรรทัดได้ด้วย
# One key per line 0x01:158:55:835:90:55 0x01:139:172:835:125:55 0x01:102:298:835:115:55 0x01:217:412:835:95:55
ในตัวอย่างด้านบน หน้าจอสัมผัสมีความละเอียด 480x800 ดังนั้น คีย์เสมือนทั้งหมดจึงมีพิกัด <centerY> เป็น 835 ซึ่งอยู่ต่ำกว่าพื้นที่ที่มองเห็นของหน้าจอสัมผัสเล็กน้อย
คีย์แรกมีรหัสการสแกน Linux เป็น 158 (KEY_BACK), centerX เป็น
    55, centerY เป็น 835, ความกว้างเป็น 90 และความสูงเป็น
    55
ตัวอย่าง
ไฟล์แผนที่คีย์เสมือน: /sys/board_properties/virtualkeys.touchyfeely
0x01:158:55:835:90:55 0x01:139:172:835:125:55 0x01:102:298:835:115:55 0x01:217:412:835:95:55
ไฟล์เลย์เอาต์คีย์: /system/usr/keylayout/touchyfeely.kl
key 158 BACK key 139 MENU key 172 HOME key 217 SEARCH
ไฟล์แผนที่อักขระของคีย์: /system/usr/keychars/touchyfeely.kcm
type SPECIAL_FUNCTION
ท่าทางสัมผัสของเคอร์เซอร์แบบมัลติทัชโดยอ้อม
ในโหมดเคอร์เซอร์ ระบบจะตีความท่าทางสัมผัสต่อไปนี้
- แตะด้วยนิ้วเดียว: คลิก
- การเคลื่อนไหวด้วยนิ้วเดียว: ย้ายเคอร์เซอร์
- การเคลื่อนไหวด้วยนิ้วเดียวบวกการกดปุ่ม: ลากเคอร์เซอร์
- การเคลื่อนไหวด้วย 2 นิ้วโดยทั้ง 2 นิ้วเคลื่อนที่ไปในทิศทางเดียวกัน: ลากพื้นที่ใต้เคอร์เซอร์ ไปในทิศทางนั้น แต่ตัวชี้จะไม่ขยับ
- การเคลื่อนไหวด้วย 2 นิ้ว โดยทั้ง 2 นิ้วเคลื่อนเข้าหากันหรือออกจากกันใน ทิศทางที่แตกต่างกัน: เลื่อน/ปรับขนาด/หมุนพื้นที่รอบๆ เคอร์เซอร์ แต่ตัวชี้จะไม่ขยับ
- การเคลื่อนไหวแบบหลายนิ้ว: ท่าทางสัมผัสแบบอิสระ
การปฏิเสธฝ่ามือ
ตั้งแต่ Android 13 เป็นต้นไป ระบบจะปฏิเสธอินพุตจากฝ่ามือโดยอัตโนมัติ
    เมื่อเปิดใช้เฟรมเวิร์กในตัว ระบบยังคงรองรับโซลูชันที่สร้างขึ้นเองภายในองค์กร
    แม้ว่าอาจต้องมีการแก้ไขเพื่อส่งคืนแฟล็ก TOOL_TYPE_PALM เมื่อตรวจพบฝ่ามือ
    ก็ตาม นอกจากนี้ เฟรมเวิร์กในตัวยังทำงานร่วมกับโซลูชันที่กำหนดเองได้ด้วย
โมเดลจริงจะดูข้อมูลท่าทางสัมผัส 90 มิลลิวินาทีแรกที่เคอร์เซอร์ปัจจุบันและเคอร์เซอร์โดยรอบ จากนั้นจะพิจารณาว่าการแตะอยู่ห่างจากขอบจอแสดงผลมากน้อยเพียงใด
    จากนั้นจะพิจารณาว่านิ้วใดเป็นฝ่ามือโดยพิจารณาจากนิ้วแต่ละนิ้ว นอกจากนี้ ยังพิจารณาถึงขนาดของรายชื่อติดต่อแต่ละรายการตามที่รายงานโดย touchMajor และ
     touchMinor ด้วย จากนั้นเฟรมเวิร์ก Android จะนำเคอร์เซอร์ที่ทำเครื่องหมายเป็น
      ฝ่ามือออกจากสตรีมการแตะ
หากมีการส่งพอยน์เตอร์ไปยังแอปแล้ว ระบบจะดำเนินการอย่างใดอย่างหนึ่งต่อไปนี้
- (หากมีเคอร์เซอร์อื่นๆ ที่ใช้งานอยู่) ยกเลิกเคอร์เซอร์ที่มี ACTION_POINTER_UPและตั้งค่าFLAG_CANCELED
- (หากเป็นเคอร์เซอร์เดียว) ยกเลิกเคอร์เซอร์ด้วย ACTION_CANCEL
API สาธารณะ MotionEvent.FLAG_CANCELED ระบุว่าเหตุการณ์ปัจจุบัน
         ไม่ควรทริกเกอร์การกระทําของผู้ใช้ โดยตั้งค่าสำหรับทั้ง ACTION_CANCEL
         และ ACTION_POINTER_UP
    
หากไม่ได้ส่งเคอร์เซอร์ฝ่ามือไปยังแอป ระบบจะทิ้งเคอร์เซอร์
เปิดใช้การปฏิเสธฝ่ามือ
- ในไดรเวอร์การสัมผัส ให้ใช้มาโคร
 input_abs_set_resเพื่อตั้งค่าความละเอียดสำหรับฟิลด์ต่อไปนี้ (หน่วยคือ พิกเซลต่อมม.)- ABS_MT_POSITION_X
- ABS_MT_POSITION_Y
- ABS_MT_TOUCH_MAJOR
- ABS_MT_TOUCH_MINOR
 คุณจะรองรับ ABS_MT_TOUCH_MINORหรือไม่ก็ได้ แต่หากอุปกรณ์รองรับ ให้ตรวจสอบว่าได้ตั้งค่าความละเอียดอย่างถูกต้อง
- หากต้องการยืนยันว่าตั้งค่าช่องอย่างถูกต้อง ให้เรียกใช้คำสั่งต่อไปนี้
$ adb shell getevent -li
- หากต้องการเปิดใช้ฟีเจอร์นี้ในระหว่างรันไทม์ ให้เรียกใช้คำสั่งต่อไปนี้
$ adb shell device_config put input_native_boot palm_rejection_enabled 1
- รีสตาร์ทกระบวนการ system_server$ adb shell stop && adb shell start
- ตรวจสอบว่า adb shell dumpsys inputแสดงว่ามีตัวป้องกันการสัมผัสด้วยฝ่ามืออยู่ภายในUnwantedInteractionBlockerหากไม่เป็นเช่นนั้น ให้ตรวจสอบบันทึกที่เกี่ยวข้องกับอินพุตเพื่อหา คำใบ้เกี่ยวกับสิ่งที่อาจกำหนดค่าไม่ถูกต้องโปรดดูตัวอย่างต่อไปนี้เพื่อเป็นข้อมูลอ้างอิง UnwantedInteractionBlocker: mEnablePalmRejection: true isPalmRejectionEnabled (flag value): true mPalmRejectors: deviceId = 3: mDeviceInfo: max_x =max_y = x_res = 11.00 y_res = 11.00 major_radius_res = 1.00 minor_radius_res = 1.00 minor_radius_supported = true touch_major_res = 1 touch_minor_res = 1 mSlotState: mSlotsByPointerId: mPointerIdsBySlot: mSuppressedPointerIds: {} 
- หากต้องการเปิดใช้ฟีเจอร์นี้อย่างถาวร ให้เพิ่มคำสั่ง sysprop ที่เกี่ยวข้องในไฟล์
    init**rcดังนี้setprop persist.device_config.input_native_boot.palm_rejection_enabled 1 
