ความแตกต่างระหว่าง OnTouch และ OnClick Android


91

มีความแตกต่างระหว่างOnTouchListenerและOnClickListenerหรือไม่? ฉันไม่ได้ถามจากมุมมองการเขียนโปรแกรม แต่จากมุมมองของประสบการณ์ผู้ใช้

ใช้อันไหนดี

เราจำเป็นต้องใช้ทั้งสองอย่างหรือไม่?

คำตอบ:


101

ใช้อันไหนดี

มันขึ้นอยู่กับความต้องการของคุณจริงๆ

onTouchให้คุณ Motion Event ดังนั้นคุณสามารถทำสิ่งที่แปลกใหม่ได้มากมายเนื่องจากช่วยแยกสถานะการเคลื่อนไหว เพียงเพื่อชื่อไม่กี่:

  • ACTION_UP
  • ACTION_DOWN
  • ACTION_MOVE

สิ่งเหล่านี้คือการกระทำทั่วไปที่เรามักจะใช้เพื่อให้ได้ผลลัพธ์ที่ต้องการเช่นการลากมุมมองบนหน้าจอ

ในทางกลับกันonClickไม่ได้ให้อะไรคุณมากนักยกเว้นว่าผู้ใช้ดูโต้ตอบ onClickเป็นเหตุการณ์ที่สมบูรณ์ซึ่งประกอบด้วยการโฟกัสการกดและการปล่อย ดังนั้นคุณจึงควบคุมมันได้เล็กน้อย ด้านหนึ่งมันง่ายมากที่จะใช้

เราจำเป็นต้องใช้ทั้งสองอย่างหรือไม่?

ไม่จำเป็นเว้นแต่คุณต้องการทำให้ผู้ใช้ของคุณวุ่นวาย onClickถ้าคุณเพียงต้องการเหตุการณ์คลิกง่ายไปสำหรับ onTouchหากคุณต้องการมากกว่าการคลิกไปสำหรับ การทำทั้งสองอย่างจะทำให้กระบวนการยุ่งยาก

จากจุดที่ผู้ใช้ในมุมมองของมันเป็นที่สังเกตถ้าคุณดำเนินการอย่างรอบคอบเพื่อให้มีลักษณะเหมือนonTouchonClick


3
หากคุณต้องการการควบคุมให้ไปที่ onTouch สำหรับกรณีส่วนใหญ่ onClick จะทำ ดูคำตอบของ PH7
drulabs

ฉันยังคงพยายามคิดว่าจะใช้ตัวไหนดี หากฉันมีมุมมอง 4 มุมมอง 3 ซึ่งต้องใช้ทั้งการคลิกและการปัดในขณะที่ 4 มีเพียงคลิกเดียว ฉันรู้ว่าฉันสามารถใช้ onTouch เป็นเพียงการคลิกหรือปัดสำหรับ 3 มุมมองแรก แต่ครั้งที่ 4 ล่ะ? ฉันควรใช้ onClick สำหรับมุมมองเดียวหรือเพียงแค่ใช้ onTouch ตั้งแต่เรียกแล้ว .. ?
cjayem13

ควรสังเกตว่าอาจจำเป็นต้องใช้ onTouch เพื่อให้ได้ผลลัพธ์บางอย่างซึ่งในกรณีนี้มุมมองของผู้ใช้จะถูกทำลาย FE หากคุณต้องการปิดกั้นไม่ให้ซอฟต์คีย์บอร์ดแสดงดังนั้นคุณสามารถระบุได้ด้วยตัวคุณเองจะต้องผ่านทาง onTouch TIL onClick จะไม่ทำ
ChiefTwoPencils

24

เหตุการณ์ "แตะ" คือเมื่อมีคนวางนิ้วบนหน้าจอ มันถูกเรียกตลอดการเคลื่อนไหวของนิ้วลงลากและขึ้น "คลิก" ไม่จำเป็นต้องมาจากหน้าจอด้วยซ้ำ อาจเป็นคนกดแป้น Enter

ใช้OnTouchListenerเมื่อคุณต้องการรับเหตุการณ์จากนิ้วของใครบางคนบนหน้าจอ

ใช้OnClickListenerเมื่อคุณต้องการตรวจจับการคลิก


ฉันเคยเห็นนักพัฒนาบางคนใช้เหตุการณ์การสัมผัสสำหรับปุ่มอะไรคือสาเหตุของสิ่งนั้น? ฉันยังไม่ได้ทดสอบโทรศัพท์ แต่มีการปรับแต่งประสิทธิภาพหรือไม่?
Nixit Patel

1
@NixitPatel ไม่มีเหตุผลที่ดีในใจโดยไม่ต้องดูที่มาของพวกเขา
Thomas Dignan

จริง แต่ตอนนี้ฉันพบคำตอบแล้ว ... ด้วยความช่วยเหลือจากพวกคุณและวิธีการบางอย่างของอนุภาค ไม่ต้องกังวลขอบคุณที่ถาม
Nixit Patel

9
  • onClickListener จะใช้เมื่อใดก็ตามที่มีการเพิ่มเหตุการณ์การคลิกสำหรับมุมมองใด ๆ เช่นคลิกเหตุการณ์สำหรับปุ่ม ImageButton

  • onTouchListener จะใช้เมื่อใดก็ตามที่คุณต้องการใช้ฟังก์ชันประเภท Touch เช่นหากคุณต้องการพิกัดของหน้าจอที่คุณสัมผัส

จากเอกสารอย่างเป็นทางการคำจำกัดความสำหรับทั้งสองคือ:

  • onClickListner: คำจำกัดความของอินเทอร์เฟซสำหรับการเรียกกลับที่จะเรียกใช้เมื่อมีการคลิกมุมมอง
  • onTouchListener: คำจำกัดความของอินเทอร์เฟซสำหรับการเรียกกลับที่จะเรียกใช้เมื่อเหตุการณ์การสัมผัสถูกส่งไปยังมุมมองนี้ การโทรกลับจะถูกเรียกก่อนที่เหตุการณ์การสัมผัสจะถูกมอบให้กับมุมมอง

1
ฉันเคยเห็นนักพัฒนาบางคนใช้เหตุการณ์การสัมผัสสำหรับปุ่มอะไรจะเป็นเหตุให้? ฉันยังไม่ได้ทดสอบโทรศัพท์ แต่มีการปรับแต่งประสิทธิภาพหรือไม่?
Nixit Patel

8

เหตุผลที่ดีอย่างหนึ่งในการใช้เหตุการณ์ ontouch กับเหตุการณ์ onclick คือการได้รับการตอบสนองที่เร็วขึ้นเมื่อผู้ใช้คลิก เมื่อเหตุการณ์ onclick ประสบความล่าช้าในการตอบสนองและดำเนินการตามที่กำหนด กิจกรรม ontouch ดีกว่าสำหรับการนำเสนอเว็บแอปบนอุปกรณ์เคลื่อนที่ที่มีประสิทธิภาพสูง


2

OnClickListener - ใช้เพื่อวัตถุประสงค์พื้นฐานเมื่อเราต้องการคลิกจากผู้ใช้เช่นคลิกปุ่มไม่มีการลากหรือท่าทางบนหน้าจอ

OnTouchListenerโดยพื้นฐานแล้วเป็นการควบคุมที่ปรับแต่งได้ดีกว่า OnClickListener ดำเนินการและดำเนินการกับการกด / ปล่อยบนหน้าจอช่วยให้ผู้ใช้สามารถผสมผสานการเคลื่อนไหวการแตะลงการแตะขึ้นการลากนิ้วหรือท่าทางการเคลื่อนไหวบนหน้าจอ


1

ชอบใช้ onTouch ยกตัวอย่าง: เมื่อคุณมี ViewPager และ TextView อยู่ในนั้น หากคุณใช้ setOnClickListener บน textView คุณจะไม่สามารถปัด ViewPager ได้เมื่อคุณแตะ / ปัดบน TextView

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.