การป้อนข้อมูลด้วยสไตลัสในช่องข้อความ

Android 14 (API ระดับ 34) ขึ้นไปช่วยให้ผู้ใช้เขียนข้อความในการป้อนข้อความได้ ในแอปใดก็ได้โดยใช้สไตลัส ช่องป้อนข้อความ Android รวมถึง EditText คอมโพเนนต์และ วิดเจ็ตข้อความ WebView การสนับสนุน อินพุตสไตลัสโดยค่าเริ่มต้น

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

รูปที่ 1 ป้อนข้อมูลด้วยลายมือโดยใช้สไตลัส

EditText

เปิดใช้การเขียนด้วยลายมือโดยใช้สไตลัสในช่อง EditText ทั้งหมดโดยค่าเริ่มต้นใน Android 14 และสูงกว่า เริ่มโหมดการเขียนด้วยลายมือสำหรับ EditText เมื่อมีการเคลื่อนไหวของสไตลัส ระบบจะตรวจพบเหตุการณ์ภายในขอบเขตการเขียนด้วยลายมือของมุมมอง

ขอบเขตของการเขียนด้วยลายมือประกอบด้วยระยะห่างจากขอบแนวตั้ง 40 dp และแนวนอน 10 dp ระยะห่างจากขอบของมุมมอง ปรับขอบเขตการเขียนด้วยลายมือโดยใช้ setHandwritingBoundsOffsets() ปิดใช้งานการเขียนด้วยลายมือด้วย setAutoHandwritingEnabled(false)

วันที่ ช่องป้อนข้อมูลที่มีสี่เหลี่ยมผืนผ้าล้อมรอบซึ่งระบุขอบเขตสำหรับการตรวจจับเหตุการณ์การเคลื่อนไหวของสไตลัส
รูปที่ 2 ขอบเขตการเขียนด้วยลายมือของ EditText ช่อง

การมอบสิทธิ์อินพุต

แอปสามารถแสดงองค์ประกอบ UI ที่เป็นตัวยึดตำแหน่งที่ปรากฏเป็นช่องป้อนข้อความ แต่ เป็นเพียงองค์ประกอบ UI แบบคงที่ ซึ่งไม่มีความสามารถในการป้อนข้อความ ค้นหา เป็นตัวอย่างทั่วไป การแตะองค์ประกอบ UI แบบคงที่จะทริกเกอร์การเปลี่ยน ไปยัง UI ใหม่ที่มีช่องป้อนข้อความที่ใช้งานได้ซึ่งเน้นสำหรับป้อนข้อมูล

รูปที่ 3 ป้อนการมอบสิทธิ์จากองค์ประกอบ UI แบบคงที่ไปยังช่องป้อนข้อความ

การมอบสิทธิ์อินพุตสไตลัส

ใช้ API การมอบสิทธิ์การเขียนด้วยลายมือเพื่อรองรับการป้อนข้อมูลด้วยลายมือโดยใช้สไตลัสสำหรับ ช่องป้อนข้อมูลตัวยึดตำแหน่ง (โปรดดู setHandwritingDelegatorCallback() และ setIsHandwritingDelegate()) องค์ประกอบ UI ตัวยึดตำแหน่งได้รับการกำหนดค่าให้มอบสิทธิ์การเขียนด้วยลายมือให้กับฟังก์ชัน เช่น

Kotlin

if (Build.VERSION.SDK_INT >= 34) {
    placeholderInputField.setHandwritingDelegatorCallback {
        showAndFocusDelegateInputField()
    }
    delegateInputField.setIsHandwritingDelegate(true)
}

Java

if (Build.VERSION.SDK_INT >= 34) {
    placeholderInputField.setHandwritingDelegatorCallback(this::showAndFocusInputFieldDelegate);
    delegateInputField.setIsHandwritingDelegate(true);
}

การเคลื่อนไหวของสไตลัสเหนือมุมมองช่องป้อนข้อความตัวยึดตำแหน่งจะเรียกใช้ Callback Callback จะทริกเกอร์การเปลี่ยน UI เพื่อแสดงและโฟกัสอินพุตด้านฟังก์ชันการทำงาน ด้วย โดยปกติแล้ว การใช้งาน Callback จะเหมือนกับการติดตั้งใช้งาน สำหรับ Listener การคลิก ในองค์ประกอบตัวยึดตำแหน่ง เมื่อช่องป้อนข้อมูลการทำงาน สร้าง InputConnection โหมดการเขียนด้วยลายมือของสไตลัสจะเริ่มขึ้น

รูปที่ 4 การมอบสิทธิ์อินพุตสไตลัสจากองค์ประกอบ UI แบบคงที่ไปยังช่องป้อนข้อความ

ดีไซน์ Material

com.google.android.material.search ไลบรารีจะมี SearchBar และ SearchView ชั้นเรียน เพื่ออำนวยความสะดวกในการใช้รูปแบบ UI ตัวยึดตำแหน่ง

ตัวยึดตำแหน่งและมุมมองการค้นหาที่ใช้งานได้เชื่อมโยงอยู่กับ setUpWithSearchBar()

มอบสิทธิ์การเขียนด้วยลายมือได้ในไลบรารี Material โดยจะไม่มีส่วนเพิ่มเติมใดๆ ที่จำเป็นในแอป

ซ้อนทับกับพื้นที่สำหรับวาดภาพ

หากแอปของคุณมีพื้นผิวสำหรับวาดเขียนที่มีช่องข้อความวางซ้อนบนพื้นผิวนั้น อาจต้องปิดใช้การเขียนด้วยลายมือของสไตลัสเพื่อให้ผู้ใช้วาดได้ โปรดดู setAutoHandwritingEnabled()

การทดสอบ

การเขียนด้วยลายมือโดยใช้สไตลัสใช้งานได้ในอุปกรณ์ Android 14 ขึ้นไปที่มี อุปกรณ์อินพุตสไตลัสที่เข้ากันได้และวิธีการป้อนข้อมูล Editor (IME) ที่ รองรับ API การเขียนด้วยลายมือโดยใช้สไตลัสใน Android 14

หากไม่มีอุปกรณ์อินพุตสไตลัส ให้จำลองอินพุตสไตลัสในอุปกรณ์ใดก็ได้ ที่มีการเข้าถึงราก (รวมถึงโปรแกรมจำลอง) โดยใช้ Android Debug Bridge ต่อไปนี้ คำสั่ง (adb):


// Android 14
adb shell setprop persist.debug.input.simulate_stylus_with_touch true && adb shell stop && adb shell start

// Android 15 and higher
// Property takes effect after screen reconfiguration such as orientation change.
adb shell setprop debug.input.simulate_stylus_with_touch true

ใช้ Gboard รุ่นเบต้าในการทดสอบหากคุณใช้อุปกรณ์ที่ไม่รองรับ สไตลัส

แหล่งข้อมูลเพิ่มเติม