สร้างวิธีการป้อนข้อมูล

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

ในการเพิ่ม IME ลงในระบบ Android ให้สร้างแอปพลิเคชัน Android ที่มีคลาส ขยาย InputMethodService นอกจากนี้ คุณมักจะสร้างกิจกรรม "การตั้งค่า" ที่ส่งตัวเลือกไปยังบริการ IME ด้วย นอกจากนี้ คุณยังกําหนด UI การตั้งค่าที่จะแสดงเป็นส่วนหนึ่งของการตั้งค่าระบบได้ด้วย

หน้านี้ครอบคลุมหัวข้อต่อไปนี้

หากคุณยังไม่ได้ใช้ IME โปรดอ่านบทความแนะนำ วิธีการป้อนข้อมูลบนหน้าจอ ก่อน

วงจรชีวิตของ IME

แผนภาพต่อไปนี้อธิบายวงจรชีวิตของ IME

รูปภาพแสดงวงจรชีวิตของ IME
รูปที่ 1 วงจรชีวิตของ IME

ส่วนต่อไปนี้จะอธิบายวิธีใช้ UI และโค้ดที่เชื่อมโยงกับ IME จะเดินตามวงจรนี้

ประกาศคอมโพเนนต์ IME ในไฟล์ Manifest

ในระบบ Android IME คือแอปพลิเคชัน Android ที่มีบริการ IME พิเศษ ไฟล์ Manifest ของแอปพลิเคชันต้องประกาศบริการ ขอสิทธิ์ที่จําเป็น ระบุตัวกรอง Intent ที่ตรงกับการดำเนินการ action.view.InputMethod และระบุข้อมูลเมตาที่กําหนดลักษณะของ IME นอกจากนี้ หากต้องการระบุอินเทอร์เฟซการตั้งค่าที่ผู้ใช้สามารถแก้ไขลักษณะการทำงานของ IME ได้ คุณสามารถกำหนดกิจกรรม "การตั้งค่า" ที่เปิดได้จากการตั้งค่าระบบ

ข้อมูลโค้ดต่อไปนี้แจ้งบริการ IME ขอสิทธิ์ BIND_INPUT_METHOD เพื่อให้บริการเชื่อมต่อ IME กับระบบ ให้ตั้งค่าตัวกรอง Intent ที่ตรงกับการดำเนินการ android.view.InputMethod และกำหนดข้อมูลเมตาสำหรับ IME ดังนี้

<!-- Declares the input method service. -->
<service android:name="FastInputIME"
    android:label="@string/fast_input_label"
    android:permission="android.permission.BIND_INPUT_METHOD">
    <intent-filter>
        <action android:name="android.view.InputMethod" />
    </intent-filter>
    <meta-data android:name="android.view.im"
               android:resource="@xml/method" />
</service>

ข้อมูลโค้ดถัดไปจะประกาศกิจกรรมการตั้งค่าสําหรับ IME โดยแอปมีตัวกรอง Intent สำหรับ ACTION_MAIN ที่ระบุว่ากิจกรรมนี้เป็นจุดแรกเข้าหลักสําหรับแอปพลิเคชัน IME

<!-- Optional: an activity for controlling the IME settings. -->
<activity android:name="FastInputIMESettings"
    android:label="@string/fast_input_settings">
    <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
    </intent-filter>
</activity>

นอกจากนี้คุณยังให้สิทธิ์เข้าถึงการตั้งค่าของ IME ได้โดยตรงจาก UI ของ IME

API วิธีการป้อนข้อมูล

คลาสสำหรับ IME โดยเฉพาะจะอยู่ในแพ็กเกจ android.inputmethodservice และ android.view.inputmethod ชั้นเรียน KeyEvent คือ สำคัญในการจัดการอักขระบนแป้นพิมพ์

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

คลาสต่อไปนี้ก็มีความสำคัญเช่นกัน

BaseInputConnection
กำหนดช่องทางการสื่อสารจาก InputMethod กลับไปยังแอปพลิเคชันที่กำลังรับอินพุต คุณใช้หน้านี้เพื่ออ่านข้อความรอบๆ เคอร์เซอร์ คอมมิตข้อความลงในกล่องข้อความ และส่งเหตุการณ์สำคัญที่เป็นข้อมูลดิบไปยังแอปพลิเคชัน แอปพลิเคชันต้องขยายคลาสนี้แทนที่จะใช้อินเทอร์เฟซพื้นฐาน InputConnection
KeyboardView
ส่วนขยายของ View ที่แสดงผลแป้นพิมพ์และตอบสนองต่อเหตุการณ์ที่เป็นอินพุตจากผู้ใช้ได้ รูปแบบแป้นพิมพ์จะกำหนดโดย อินสแตนซ์ของ Keyboard ที่คุณกำหนดในไฟล์ XML ได้

ออกแบบ UI วิธีการป้อนข้อมูล

องค์ประกอบภาพหลักของ IME มี 2 อย่าง ได้แก่ มุมมองอินพุตและมุมมองตัวเลือก คุณต้องติดตั้งเฉพาะองค์ประกอบที่เกี่ยวข้องกับ วิธีการป้อนข้อมูลที่คุณออกแบบ

มุมมองอินพุต

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

Kotlin

override fun onCreateInputView(): View {
    return layoutInflater.inflate(R.layout.input, null).apply {
        if (this is MyKeyboardView) {
            setOnKeyboardActionListener(this@MyInputMethod)
            keyboard = latinKeyboard
        }
    }
}

Java

@Override
public View onCreateInputView() {
    MyKeyboardView inputView =
        (MyKeyboardView) getLayoutInflater().inflate(R.layout.input, null);

    inputView.setOnKeyboardActionListener(this);
    inputView.setKeyboard(latinKeyboard);

    return inputView;
}

ในตัวอย่างนี้ MyKeyboardView เป็นตัวอย่างการติดตั้งใช้งานที่กำหนดเองของ KeyboardView ที่แสดงผล Keyboard

มุมมองผู้สมัคร

มุมมองตัวเลือกเป็น UI ที่ IME จะแสดงการแก้ไขคำที่อาจแนะนำหรือคำแนะนำ เพื่อให้ผู้ใช้เลือก ในวงจรของ IME ระบบจะเรียกใช้ onCreateCandidatesView() เมื่อพร้อมที่จะแสดงมุมมองตัวเลือก ในการใช้งานเมธอดนี้ ให้แสดงผล แสดงการแนะนำคำ หรือแสดงผลเป็น Null หากคุณไม่ต้องการแสดงสิ่งใด ค่าว่าง การตอบกลับเป็นลักษณะการทำงานเริ่มต้น ดังนั้นคุณไม่ต้องดำเนินการใดๆ ถ้าไม่ได้ระบุ แนะนำ

ข้อควรพิจารณาเกี่ยวกับการออกแบบ UI

ส่วนนี้จะอธิบายข้อควรพิจารณาบางอย่างในการออกแบบ UI สำหรับ IME

จัดการหน้าจอหลายขนาด

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

จัดการอินพุตประเภทต่างๆ

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

ตัวอย่างเช่น ต่อไปนี้คืออินเทอร์เฟซที่ IME ภาษาละตินมีให้สำหรับการป้อนข้อความในแพลตฟอร์ม Android

รูปภาพแสดงการป้อนข้อความใน IME ภาษาละติน
รูปที่ 2 การป้อนข้อความ IME สำหรับภาษาละติน

นี่คืออินเทอร์เฟซที่ IME ภาษาละตินมีให้สำหรับแพลตฟอร์ม Android การป้อนตัวเลข:

รูปภาพที่แสดงการป้อนตัวเลขใน IME ภาษาละติน
รูปที่ 3 การป้อนข้อมูลตัวเลข IME ภาษาละติน

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

ฟิลด์ inputType คือ int ที่มีรูปแบบบิตสำหรับ การตั้งค่าประเภทอินพุต ในการทดสอบประเภทอินพุตของฟิลด์ข้อความ ให้มาสก์ด้วยค่าคงที่ TYPE_MASK_CLASS ดังนี้

Kotlin

inputType and InputType.TYPE_MASK_CLASS

Java

inputType & InputType.TYPE_MASK_CLASS

รูปแบบบิตของประเภทอินพุตมีได้หลายค่า ดังนี้

TYPE_CLASS_NUMBER
ช่องข้อความสําหรับป้อนตัวเลข ดังที่แสดงในรูปที่ 3 IME ภาษาละตินจะแสดงแป้นตัวเลขสำหรับช่องประเภทนี้
TYPE_CLASS_DATETIME
ช่องข้อความสำหรับป้อนวันที่และเวลา
TYPE_CLASS_PHONE
ช่องข้อความสําหรับป้อนหมายเลขโทรศัพท์
TYPE_CLASS_TEXT
ช่องข้อความสำหรับป้อนอักขระที่รองรับ

ค่าคงที่เหล่านี้มีการอธิบายไว้อย่างละเอียดในเอกสารประกอบอ้างอิงสำหรับ InputType

ฟิลด์ inputType อาจมีบิตอื่นๆ ที่ระบุตัวแปรของช่องข้อความ เช่น

TYPE_TEXT_VARIATION_PASSWORD
รูปแบบหนึ่งของ TYPE_CLASS_TEXT สำหรับป้อนรหัสผ่าน วิธีการป้อนข้อมูลจะปรากฏขึ้น Dingbats แทนข้อความจริง
TYPE_TEXT_VARIATION_URI
ตัวแปรของ TYPE_CLASS_TEXT สำหรับการป้อน URL ของเว็บและ Uniform Resource Identifier (URI) อื่นๆ
TYPE_TEXT_FLAG_AUTO_COMPLETE
ตัวแปรของ TYPE_CLASS_TEXT สําหรับป้อนข้อความที่แอปพลิเคชันจะเติมให้อัตโนมัติจากพจนานุกรม การค้นหา หรือสิ่งอํานวยความสะดวกอื่นๆ

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

ส่งข้อความไปยังแอปพลิเคชัน

เมื่อผู้ใช้ป้อนข้อความด้วย IME คุณสามารถส่งข้อความไปยังแอปพลิเคชันได้โดยส่งเหตุการณ์การกดแป้นแต่ละรายการ หรือโดยการแก้ไขข้อความรอบๆ เคอร์เซอร์ในช่องข้อความของแอปพลิเคชัน ไม่ว่าในกรณีใด ให้ใช้อินสแตนซ์ของ InputConnection เพื่อส่งข้อความ ในการรับอินสแตนซ์นี้ ให้เรียกใช้ InputMethodService.getCurrentInputConnection()

แก้ไขข้อความรอบๆ เคอร์เซอร์

เมื่อจัดการกับการแก้ไขข้อความที่มีอยู่ วิธีการที่มีประโยชน์บางอย่างใน BaseInputConnection มีดังนี้

getTextBeforeCursor()
ส่งคืน CharSequence ซึ่งมีจำนวนอักขระที่ขอก่อนตำแหน่งเคอร์เซอร์ปัจจุบัน
getTextAfterCursor()
แสดงผล CharSequence ที่มีจำนวนอักขระที่ขอตามหลังตำแหน่งเคอร์เซอร์ปัจจุบัน
deleteSurroundingText()
ลบจำนวนอักขระที่ระบุก่อนและตามหลังตำแหน่งเคอร์เซอร์ปัจจุบัน
commitText()
ส่ง CharSequence ไปยังช่องข้อความและตั้งค่าตำแหน่งเคอร์เซอร์ใหม่

ตัวอย่างเช่น ข้อมูลโค้ดต่อไปนี้แสดงวิธีแทนที่อักขระ 4 ตัวทางด้านซ้ายของแท็ก เคอร์เซอร์ที่มีข้อความ "สวัสดี":

Kotlin

currentInputConnection.also { ic: InputConnection ->
    ic.deleteSurroundingText(4, 0)
    ic.commitText("Hello", 1)
    ic.commitText("!", 1)
}

Java

InputConnection ic = getCurrentInputConnection();
ic.deleteSurroundingText(4, 0);
ic.commitText("Hello", 1);
ic.commitText("!", 1);

รองรับการเขียนข้อความก่อนดำเนินการ

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

ข้อมูลโค้ดต่อไปนี้แสดงวิธีแสดงความคืบหน้าในช่องข้อความ

Kotlin

currentInputConnection.also { ic: InputConnection ->
    ic.setComposingText("Composi", 1)
    ic.setComposingText("Composin", 1)
    ic.commitText("Composing ", 1)
}

Java

InputConnection ic = getCurrentInputConnection();
ic.setComposingText("Composi", 1);
ic.setComposingText("Composin", 1);
ic.commitText("Composing ", 1);

สกัดกั้นเหตุการณ์สำคัญของฮาร์ดแวร์

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

หากต้องการสกัดกั้นคีย์ฮาร์ดแวร์ ให้ลบล้าง onKeyDown() และ onKeyUp()

เรียกใช้เมธอด super() สำหรับคีย์ที่คุณไม่ต้องการจัดการด้วยตนเอง

สร้างประเภทย่อยของ IME

ประเภทย่อยช่วยให้ IME แสดงโหมดป้อนข้อมูลหลายภาษาและภาษาที่ IME รองรับ ประเภทย่อยอาจ มีความหมายดังต่อไปนี้

  • ภาษา เช่น en_US หรือ fr_FR
  • โหมดการป้อนข้อมูล เช่น เสียง แป้นพิมพ์ หรือลายมือ
  • รูปแบบ รูปแบบ หรือพร็อพเพอร์ตี้การป้อนข้อมูลอื่นๆ ที่เฉพาะเจาะจงสำหรับ IME เช่น เลย์เอาต์แป้นพิมพ์ 10 ปุ่มหรือ QWERTY

โหมดอาจเป็นข้อความใดก็ได้ เช่น "แป้นพิมพ์" หรือ "เสียง" ประเภทย่อยยังสามารถแสดงชุดค่าผสม จากทั้งหมดนี้

ระบบจะใช้ข้อมูลประเภทย่อยสำหรับกล่องโต้ตอบตัวสลับ IME ที่พร้อมใช้งานจากแถบการแจ้งเตือนและสำหรับการตั้งค่า IME ข้อมูลนี้ยังช่วยให้เฟรมเวิร์กแสดงประเภทย่อยที่เฉพาะเจาะจงของ IME ได้โดยตรงอีกด้วย เมื่อสร้าง IME ให้ใช้บริการประเภทย่อย เนื่องจากจะช่วยให้ผู้ใช้ระบุ สลับระหว่างภาษาและโหมดของ IME ต่างๆ

กำหนดประเภทย่อยในไฟล์ทรัพยากร XML ของวิธีป้อนข้อมูลโดยใช้องค์ประกอบ <subtype> ข้อมูลโค้ดต่อไปนี้กำหนด IME ที่มี 2 ประเภทย่อย ได้แก่ ประเภทย่อยของแป้นพิมพ์สำหรับภาษาอังกฤษ (สหรัฐอเมริกา) และประเภทย่อยของแป้นพิมพ์สำหรับภาษาฝรั่งเศส สถานที่ของฝรั่งเศส:

<input-method xmlns:android="http://schemas.android.com/apk/res/android"
        android:settingsActivity="com.example.softkeyboard.Settings"
        android:icon="@drawable/ime_icon">
    <subtype android:name="@string/display_name_english_keyboard_ime"
            android:icon="@drawable/subtype_icon_english_keyboard_ime"
            android:languageTag="en-US"
            android:imeSubtypeMode="keyboard"
            android:imeSubtypeExtraValue="somePrivateOption=true" />
    <subtype android:name="@string/display_name_french_keyboard_ime"
            android:icon="@drawable/subtype_icon_french_keyboard_ime"
            android:languageTag="fr-FR"
            android:imeSubtypeMode="keyboard"
            android:imeSubtypeExtraValue="someVariable=30,someInternalOption=false" />
    <subtype android:name="@string/display_name_german_keyboard_ime" ... />
</input-method>

เพื่อให้แน่ใจว่าประเภทย่อยของคุณมีป้ายกำกับอย่างถูกต้องใน UI ให้ใช้ "%s" เพื่อรับป้ายกำกับประเภทย่อยที่ จะเหมือนกับป้ายกำกับภาษาของประเภทย่อย ซึ่งจะแสดงในข้อมูลโค้ด 2 รายการถัดไป ข้อมูลโค้ดแรกจะแสดงส่วนหนึ่งของไฟล์ XML ของวิธีการป้อนข้อมูล ดังนี้

<subtype
    android:label="@string/label_subtype_generic"
    android:imeSubtypeLocale="en_US"
    android:icon="@drawable/icon_en_us"
    android:imeSubtypeMode="keyboard" />

ข้อมูลโค้ดถัดไปเป็นส่วนหนึ่งของไฟล์ strings.xml ของ IME ทรัพยากรสตริง label_subtype_generic ซึ่งคําจํากัดความของ UI ของวิธีการป้อนข้อมูลใช้เพื่อตั้งค่าป้ายกํากับของประเภทย่อยมีดังนี้

<string name="label_subtype_generic">%s</string>

การตั้งค่านี้จะทำให้ชื่อที่แสดงของประเภทย่อยตรงกับการตั้งค่าภาษา ตัวอย่างเช่น ในภาษาท้องถิ่นใดก็ได้ของอังกฤษ ชื่อที่แสดงจะเป็น "อังกฤษ (สหรัฐอเมริกา)"

เลือกประเภทย่อยของ IME จากแถบการแจ้งเตือน

ระบบ Android จัดการประเภทย่อยทั้งหมดที่ IME ทั้งหมดเปิดเผย ระบบจะถือว่าประเภทย่อยของ IME เป็นโหมดของ IME นั้นๆ ผู้ใช้สามารถนำทางจากแถบการแจ้งเตือนหรือแอปการตั้งค่าไปยัง เมนูย่อยของ IME ที่สามารถใช้ได้ ดังที่แสดงในรูปต่อไปนี้

รูปภาพแสดงภาษาและ ป้อน เมนูระบบ
รูปที่ 4 เมนูระบบภาษาและการป้อนข้อมูล

เลือกประเภทย่อยของ IME จากการตั้งค่าระบบ

นอกจากนี้ ผู้ใช้ยังควบคุมวิธีใช้ประเภทย่อยในแผงการตั้งค่าภาษาและการป้อนข้อมูลในการตั้งค่าระบบได้ด้วย โดยทำดังนี้

รูปภาพแสดงเมนูการเลือกภาษา
รูปที่ 5 เมนูระบบ ภาษา

สลับระหว่าง IME ย่อย

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

  1. ประกาศ supportsSwitchingToNextInputMethod = "true" ในไฟล์ทรัพยากร XML ของวิธีการป้อนข้อมูล การประกาศของคุณต้องมีลักษณะคล้ายกับข้อมูลโค้ดต่อไปนี้
    <input-method xmlns:android="http://schemas.android.com/apk/res/android"
            android:settingsActivity="com.example.softkeyboard.Settings"
            android:icon="@drawable/ime_icon"
            android:supportsSwitchingToNextInputMethod="true">
  2. เรียกใช้เมธอด shouldOfferSwitchingToNextInputMethod()
  3. หากเมธอดแสดงผลเป็น "จริง" ให้แสดงปุ่มสลับ
  4. เมื่อผู้ใช้แตะแป้นสลับ ให้เรียกใช้ switchToNextInputMethod() การส่งค่าเท็จ ค่าเท็จจะบอกให้ระบบปฏิบัติกับประเภทย่อยทั้งหมดอย่างเท่าเทียมกัน ไม่ว่าประเภทย่อยเหล่านั้นจะอยู่ใน IME ใดก็ตาม การระบุค่า "จริง" จะทำให้ระบบวนดูประเภทย่อยใน IME ปัจจุบัน

ข้อควรพิจารณาทั่วไปเกี่ยวกับ IME

ต่อไปนี้คือสิ่งอื่นๆ ที่ควรพิจารณาเมื่อคุณใช้ IME

  • ระบุวิธีให้ผู้ใช้ตั้งค่าตัวเลือกได้โดยตรงจาก UI ของ IME
  • มอบวิธีให้ผู้ใช้เปลี่ยนไปใช้ IME อื่นได้โดยตรงจาก UI วิธีการป้อนข้อมูล เพราะอาจมีการติดตั้ง IME หลายรายการในอุปกรณ์
  • เปิด UI ของ IME อย่างรวดเร็ว โหลดทรัพยากรขนาดใหญ่ไว้ล่วงหน้าหรือโหลดตามคําขอเพื่อให้ผู้ใช้เห็น IME ทันทีที่แตะช่องข้อความ แคชทรัพยากรและมุมมองสําหรับการเรียกใช้วิธีการป้อนข้อมูลในภายหลัง
  • ปล่อยการจัดสรรหน่วยความจำขนาดใหญ่ทันทีหลังจากที่ซ่อนหน้าต่างวิธีการป้อนข้อมูล ที่แอปพลิเคชันมีหน่วยความจำเพียงพอต่อการเรียกใช้ ใช้ข้อความที่ล่าช้าเพื่อปล่อยทรัพยากร หาก IME ซ่อนอยู่ 2-3 วินาที
  • ตรวจสอบว่าผู้ใช้ป้อนอักขระได้มากที่สุดเท่าที่จะเป็นไปได้สำหรับภาษาหรือภาษาท้องถิ่นที่เชื่อมโยงกับ IME ผู้ใช้อาจใช้เครื่องหมายวรรคตอนในรหัสผ่านหรือชื่อผู้ใช้ ดังนั้น IME ของคุณจึงต้องมีอักขระหลายแบบเพื่อให้ผู้ใช้ป้อนรหัสผ่านและเข้าถึงอุปกรณ์ได้