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

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

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

หน้านี้จะกล่าวถึงหัวข้อต่อไปนี้

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

วงจรของ IME

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

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

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

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

ในระบบ Android IME คือแอปพลิเคชัน Android ที่มีบริการ IME พิเศษ ไฟล์ Manifest ของแอปพลิเคชันต้องประกาศบริการ ขอสิทธิ์ที่จำเป็น จัดเตรียมตัวกรองความตั้งใจที่ตรงกับการดำเนินการ 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 นอกจากการใช้วงจรบริการตามปกติแล้ว คลาสนี้ยังมีการเรียกกลับสำหรับแสดง UI ของ IME, จัดการการป้อนข้อมูลของผู้ใช้ และส่งข้อความไปยังช่องที่มีโฟกัส โดยค่าเริ่มต้น คลาส InputMethodService จะจัดเตรียมการใช้งานส่วนใหญ่สำหรับจัดการสถานะและระดับการมองเห็นของ 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 ให้ตรวจสอบว่าผู้ใช้ป้อนข้อความที่ถูกต้องสำหรับประเภทอินพุตหรือไม่ การดำเนินการนี้ถือเป็นความรับผิดชอบของแอปพลิเคชันที่เป็นเจ้าของช่องข้อความ

ตัวอย่างเช่น ต่อไปนี้คืออินเทอร์เฟซที่ 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 สำหรับการป้อนรหัสผ่าน วิธีการป้อนข้อมูลแสดงอักขระแทนข้อความจริง
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 เพื่อเลือกคำที่แนะนำระหว่างการเขียน นอกจากนี้ คุณอาจต้องดักจับแป้นย้อนกลับเพื่อปิดกล่องโต้ตอบที่มาจากหน้าต่างวิธีการป้อนข้อมูล

หากต้องการสกัดกั้นคีย์ฮาร์ดแวร์ ให้ลบล้าง 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() ซึ่งส่งผ่าน false ค่าเท็จจะบอกให้ระบบปฏิบัติกับประเภทย่อยทั้งหมดอย่างเท่าเทียมกัน ไม่ว่าประเภทย่อยเหล่านั้นจะอยู่ใน IME ใดก็ตาม การระบุ "จริง" ต้องการให้ระบบหมุนเวียนผ่านประเภทย่อยใน IME ปัจจุบัน

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

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

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