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

ตัวแก้ไขวิธีการป้อนข้อมูล (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 ของแอปพลิเคชันต้องประกาศบริการ ขอสิทธิ์ที่จําเป็น ระบุตัวกรอง 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 นั้นๆ

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