इनपुट का तरीका बनाएं

इनपुट मेथड एडिटर (आईएमई), एक ऐसा यूज़र कंट्रोल है जिसकी मदद से उपयोगकर्ता टेक्स्ट डाल सकते हैं. Android, इनपुट के तरीके का एक ऐसा फ़्रेमवर्क उपलब्ध कराता है जिसे ज़रूरत के हिसाब से बढ़ाया जा सकता है. इससे ऐप्लिकेशन, उपयोगकर्ताओं को इनपुट के वैकल्पिक तरीके उपलब्ध करा सकते हैं. जैसे, ऑन-स्क्रीन कीबोर्ड या बोलकर इनपुट देने की सुविधा. आईएमई इंस्टॉल करने के बाद, उपयोगकर्ता सिस्टम सेटिंग में जाकर कोई एक आईएमई चुन सकता है और उसे पूरे सिस्टम में इस्तेमाल कर सकता है. एक बार में सिर्फ़ एक आईएमई चालू किया जा सकता है.

Android सिस्टम में आईएमई जोड़ने के लिए, एक ऐसा Android ऐप्लिकेशन बनाएं जिसमें InputMethodService को एक्सटेंड करने वाली क्लास शामिल हो. इसके अलावा, आम तौर पर एक "सेटिंग" गतिविधि बनाई जाती है, जो आईएमई सेवा को विकल्प पास करती है. आपके पास सेटिंग यूज़र इंटरफ़ेस (यूआई) तय करने का विकल्प भी होता है. इसे सिस्टम सेटिंग के हिस्से के तौर पर दिखाया जाता है.

इस पेज पर इन विषयों के बारे में बताया गया है:

अगर आपने आईएमई के साथ काम नहीं किया है, तो पहले ऑन-स्क्रीन इनपुट के तरीके लेख पढ़ें.

आईएमई का लाइफ़साइकल

यहां दिए गए डायग्राम में, आईएमई के लाइफ़साइकल के बारे में बताया गया है:

आईएमई की लाइफ़ साइकल दिखाने वाली इमेज.
पहली इमेज. आईएमई की लाइफ़साइकल.

यहां दिए गए सेक्शन में, इस लाइफ़साइकल का पालन करने वाले आईएमई से जुड़े यूज़र इंटरफ़ेस (यूआई) और कोड को लागू करने का तरीका बताया गया है.

मेनिफ़ेस्ट में आईएमई कॉम्पोनेंट के बारे में बताना

Android सिस्टम में, आईएमई एक Android ऐप्लिकेशन होता है. इसमें आईएमई की खास सेवा शामिल होती है. ऐप्लिकेशन की मेनिफ़ेस्ट फ़ाइल में, सेवा के बारे में जानकारी देना, ज़रूरी अनुमतियों का अनुरोध करना, कार्रवाई action.view.InputMethod से मैच करने वाला इंटेंट फ़िल्टर उपलब्ध कराना, और आईएमई की विशेषताओं के बारे में बताने वाला मेटाडेटा उपलब्ध कराना ज़रूरी है. इसके अलावा, उपयोगकर्ता को आईएमई के काम करने के तरीके में बदलाव करने की सुविधा देने के लिए, एक सेटिंग इंटरफ़ेस उपलब्ध कराया जा सकता है. इसके लिए, "सेटिंग" गतिविधि तय की जा सकती है. इसे सिस्टम सेटिंग से लॉन्च किया जा सकता है.

यहां दिया गया स्निपेट, आईएमई सेवा के बारे में बताता है. यह सेवा को आईएमई से सिस्टम को कनेक्ट करने की अनुमति देने के लिए, BIND_INPUT_METHOD की अनुमति का अनुरोध करता है. साथ ही, कार्रवाई android.view.InputMethod से मैच करने वाला इंटेंट फ़िल्टर सेट अप करता है और आईएमई के लिए मेटाडेटा तय करता है:

<!-- 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>

अगला स्निपेट, आईएमई के लिए सेटिंग गतिविधि के बारे में बताता है. इसमें ACTION_MAIN के लिए एक इंटेंट फ़िल्टर होता है. इससे पता चलता है कि यह गतिविधि, आईएमई ऐप्लिकेशन के लिए मुख्य एंट्री पॉइंट है:

<!-- 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>

आईएमई की सेटिंग का ऐक्सेस, सीधे उसके यूज़र इंटरफ़ेस (यूआई) से भी दिया जा सकता है.

इनपुट के तरीके वाला एपीआई

आईएमई के लिए खास क्लास, android.inputmethodservice और android.view.inputmethod पैकेज में मिलती हैं. KeyEvent क्लास, कीबोर्ड के वर्णों को हैंडल करने के लिए ज़रूरी है.

आईएमई का मुख्य हिस्सा, सेवा का कॉम्पोनेंट होता है. यह एक ऐसी क्लास है जो InputMethodService को एक्सटेंड करती है. सामान्य सेवा लाइफ़साइकल को लागू करने के अलावा, इस क्लास में आपके आईएमई के यूज़र इंटरफ़ेस (यूआई) को उपलब्ध कराने, उपयोगकर्ता के इनपुट को मैनेज करने, और फ़ोकस किए गए फ़ील्ड में टेक्स्ट डिलीवर करने के लिए कॉलबैक होते हैं. डिफ़ॉल्ट रूप से, InputMethodService क्लास, आईएमई की स्थिति और विज़िबिलिटी को मैनेज करने के साथ-साथ, मौजूदा इनपुट फ़ील्ड के साथ कम्यूनिकेट करने के लिए, ज़्यादातर सुविधाएं उपलब्ध कराती है.

ये क्लास भी अहम हैं:

BaseInputConnection
यह InputMethod से, इनपुट पाने वाले ऐप्लिकेशन तक के कम्यूनिकेशन चैनल को तय करता है. इसका इस्तेमाल कर्सर के आस-पास मौजूद टेक्स्ट को पढ़ने, टेक्स्ट बॉक्स में टेक्स्ट डालने, और ऐप्लिकेशन को रॉ की इवेंट भेजने के लिए किया जाता है. ऐप्लिकेशन को बुनियादी इंटरफ़ेस InputConnection को लागू करने के बजाय, इस क्लास को एक्सटेंड करना चाहिए.
KeyboardView
View का एक एक्सटेंशन, जो कीबोर्ड को रेंडर करता है और उपयोगकर्ता के इनपुट इवेंट का जवाब देता है. कीबोर्ड का लेआउट, Keyboard के इंस्टेंस से तय होता है. इसे किसी एक्सएमएल फ़ाइल में तय किया जा सकता है.

इनपुट के तरीके का यूआई डिज़ाइन करना

आईएमई के लिए दो मुख्य विज़ुअल एलिमेंट होते हैं: इनपुट व्यू और कैंडिडेट व्यू. आपको सिर्फ़ उन एलिमेंट को लागू करना होगा जो आपके डिज़ाइन किए जा रहे इनपुट के तरीके के लिए ज़रूरी हैं.

इनपुट व्यू

इनपुट व्यू वह यूज़र इंटरफ़ेस (यूआई) है जहां उपयोगकर्ता, कीक्लिक, हाथ से लिखकर या जेस्चर के ज़रिए टेक्स्ट डालता है. जब आईएमई पहली बार दिखता है, तो सिस्टम onCreateInputView() कॉलबैक को कॉल करता है. इस तरीके को लागू करते समय, वह लेआउट बनाएं जिसे आपको आईएमई विंडो में दिखाना है. इसके बाद, लेआउट को सिस्टम में वापस भेजें. यहां दिए गए स्निपेट में, 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 को रेंडर करता है.

उम्मीदवारों की जानकारी वाला व्यू

कैंडिडेट व्यू, वह यूज़र इंटरफ़ेस (यूआई) है जहां आईएमई, उपयोगकर्ता को चुनने के लिए, शब्दों में संभावित सुधार या सुझाव दिखाता है. आईएमई लाइफ़साइकल में, सिस्टम onCreateCandidatesView() को तब कॉल करता है, जब वह कैंडिडेट व्यू दिखाने के लिए तैयार होता है. इस तरीके को लागू करते समय, ऐसा लेआउट दिखाएं जिसमें शब्दों के सुझाव दिखते हों. अगर आपको कुछ नहीं दिखाना है, तो null दिखाएं. डिफ़ॉल्ट रूप से, null रिस्पॉन्स मिलता है. इसलिए, अगर आपको सुझाव नहीं देने हैं, तो आपको इसे लागू करने की ज़रूरत नहीं है.

यूज़र इंटरफ़ेस (यूआई) डिज़ाइन से जुड़ी ज़रूरी बातें

इस सेक्शन में, आईएमई के लिए यूज़र इंटरफ़ेस (यूआई) डिज़ाइन से जुड़ी कुछ ज़रूरी बातों के बारे में बताया गया है.

अलग-अलग स्क्रीन साइज़ के हिसाब से अडजस्ट होना

आपके आईएमई का यूज़र इंटरफ़ेस (यूआई), अलग-अलग स्क्रीन साइज़ के हिसाब से अडजस्ट होना चाहिए. साथ ही, यह लैंडस्केप और पोर्ट्रेट, दोनों ओरिएंटेशन के साथ काम करना चाहिए. नॉन-फ़ुलस्क्रीन आईएमई मोड में, ऐप्लिकेशन के लिए ज़रूरत के मुताबिक जगह छोड़ें, ताकि टेक्स्ट फ़ील्ड और उससे जुड़ा कोई कॉन्टेक्स्ट दिखाया जा सके. इससे आईएमई, स्क्रीन के आधे से ज़्यादा हिस्से को कवर नहीं करेगा. फ़ुलस्क्रीन आईएमई मोड में, यह कोई समस्या नहीं है.

अलग-अलग तरह के इनपुट को मैनेज करना

Android के टेक्स्ट फ़ील्ड में, इनपुट का कोई खास टाइप सेट किया जा सकता है. जैसे, फ़्री-फ़ॉर्म टेक्स्ट, नंबर, यूआरएल, ईमेल पते, और सर्च स्ट्रिंग. नया आईएमई लागू करते समय, हर फ़ील्ड के इनपुट टाइप का पता लगाएं और उसके लिए सही इंटरफ़ेस उपलब्ध कराएं. हालांकि, आपको यह देखने के लिए आईएमई सेट अप करने की ज़रूरत नहीं है कि उपयोगकर्ता ने इनपुट टाइप के लिए मान्य टेक्स्ट डाला है या नहीं. यह उस ऐप्लिकेशन की ज़िम्मेदारी है जिसके पास टेक्स्ट फ़ील्ड का मालिकाना हक है.

उदाहरण के लिए, यहां वह इंटरफ़ेस दिया गया है जो लैटिन आईएमई, Android प्लैटफ़ॉर्म पर टेक्स्ट इनपुट के लिए उपलब्ध कराता है:

लैटिन आईएमई पर टेक्स्ट इनपुट दिखाने वाली इमेज
दूसरी इमेज. लैटिन आईएमई टेक्स्ट इनपुट.

यहां वह इंटरफ़ेस दिया गया है जो Android प्लैटफ़ॉर्म के लिए, Latin 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
संख्याएं डालने के लिए टेक्स्ट फ़ील्ड. जैसा कि तीसरे चित्र में दिखाया गया है, लैटिन आईएमई इस तरह के फ़ील्ड के लिए नंबर पैड दिखाता है.
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 का एक वैरिएंट.
TYPE_TEXT_FLAG_AUTO_COMPLETE
टेक्स्ट डालने के लिए TYPE_CLASS_TEXT का वैरिएंट, जिसे ऐप्लिकेशन डिक्शनरी, खोज या अन्य सुविधा से अपने-आप पूरा करता है.

इन वैरिएंट की जांच करते समय, inputType को सही कॉन्सटैंट से मास्क करें. उपलब्ध मास्क कॉन्स्टेंट, InputType के रेफ़रंस दस्तावेज़ में दिए गए हैं.

ऐप्लिकेशन को टेक्स्ट भेजें

जब उपयोगकर्ता आपके आईएमई का इस्तेमाल करके टेक्स्ट डालता है, तो आपके पास ऐप्लिकेशन में टेक्स्ट भेजने का विकल्प होता है. इसके लिए, अलग-अलग मुख्य इवेंट भेजें या ऐप्लिकेशन के टेक्स्ट फ़ील्ड में कर्सर के आस-पास मौजूद टेक्स्ट में बदलाव करें. दोनों ही मामलों में, टेक्स्ट डिलीवर करने के लिए InputConnection के इंस्टेंस का इस्तेमाल करें. इस इंस्टेंस को पाने के लिए, InputMethodService.getCurrentInputConnection() को कॉल करें.

कर्सर के आस-पास मौजूद टेक्स्ट में बदलाव करना

मौजूदा टेक्स्ट में बदलाव करते समय, BaseInputConnection में मौजूद कुछ काम के तरीके यहां दिए गए हैं:

getTextBeforeCursor()
यह एक CharSequence दिखाता है, जिसमें कर्सर की मौजूदा पोज़िशन से पहले के वर्णों की संख्या होती है.
getTextAfterCursor()
यह CharSequence दिखाता है. इसमें कर्सर की मौजूदा पोज़िशन के बाद, अनुरोध किए गए वर्णों की संख्या शामिल होती है.
deleteSurroundingText()
कर्सर की मौजूदा पोज़िशन से पहले और बाद के वर्णों की तय संख्या को मिटाता है.
commitText()
टेक्स्ट फ़ील्ड में CharSequence को कमिट करता है और कर्सर की नई पोज़िशन सेट करता है.

उदाहरण के लिए, यहां दिए गए स्निपेट में कर्सर के बाईं ओर मौजूद चार वर्णों को "नमस्ते!" टेक्स्ट से बदलने का तरीका बताया गया है:

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);

टेक्स्ट को कमिट करने से पहले, उसे लिखने की सुविधा

अगर आपका आईएमई, टेक्स्ट का अनुमान लगाता है या किसी ग्लिफ़ या शब्द को बनाने के लिए कई चरणों की ज़रूरत होती है, तो टेक्स्ट फ़ील्ड में प्रोग्रेस तब तक दिखाई जा सकती है, जब तक उपयोगकर्ता शब्द को पूरा नहीं कर लेता. इसके बाद, अधूरे टेक्स्ट को पूरे टेक्स्ट से बदला जा सकता है. टेक्स्ट को setComposingText() में पास करते समय, उसमें span जोड़कर उसे खास बनाया जा सकता है.

यहां दिए गए स्निपेट में, टेक्स्ट फ़ील्ड में प्रोग्रेस दिखाने का तरीका बताया गया है:

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);

हार्डवेयर बटन के इवेंट को इंटरसेप्ट करना

इनपुट के तरीके वाली विंडो पर फ़ोकस न होने के बावजूद, उसे हार्डवेयर बटन के इवेंट सबसे पहले मिलते हैं. साथ ही, वह उनका इस्तेमाल कर सकती है या उन्हें ऐप्लिकेशन पर फ़ॉरवर्ड कर सकती है. उदाहरण के लिए, हो सकता है कि आप कंपोज़िशन के दौरान, उम्मीदवार चुनने के लिए अपने यूज़र इंटरफ़ेस (यूआई) में नेविगेट करने के लिए, दिशा बताने वाली कुंजियों का इस्तेमाल करना चाहें. इनपुट मेथड विंडो से शुरू होने वाले किसी भी डायलॉग को खारिज करने के लिए, बैक बटन को ट्रैप किया जा सकता है.

हार्डवेयर बटन को इंटरसेप्ट करने के लिए, onKeyDown() और onKeyUp() को बदलें.

जिन कुंजियों को आपको खुद मैनेज नहीं करना है उनके लिए, super() तरीके को कॉल करें.

आईएमई सबटाइप बनाना

सबटाइप की मदद से, आईएमई कई इनपुट मोड और भाषाओं को दिखा सकता है. सब-टाइप से, इनमें से किसी एक के बारे में पता चल सकता है:

  • कोई स्थान-भाषा, जैसे कि en_US या fr_FR
  • इनपुट का कोई मोड, जैसे कि बोलकर, कीबोर्ड से या हाथ से लिखकर
  • आईएमई के लिए खास तौर पर उपलब्ध अन्य इनपुट स्टाइल, फ़ॉर्म या प्रॉपर्टी. जैसे, 10-की या QWERTY कीबोर्ड लेआउट

मोड कोई भी टेक्स्ट हो सकता है, जैसे कि "कीबोर्ड" या "वॉइस". सबटाइप में, इनका कॉम्बिनेशन भी दिख सकता है.

सबटाइप की जानकारी का इस्तेमाल, आईएमई स्विचर डायलॉग के लिए किया जाता है. यह डायलॉग, सूचना बार और आईएमई सेटिंग में उपलब्ध होता है. इस जानकारी की मदद से, फ़्रेमवर्क किसी आईएमई के खास सब-टाइप को सीधे तौर पर दिखा सकता है. आईएमई बनाते समय, सबटाइप की सुविधा का इस्तेमाल करें. इससे उपयोगकर्ता को अलग-अलग आईएमई भाषाओं और मोड के बीच स्विच करने और उनकी पहचान करने में मदद मिलती है.

इनपुट के तरीके की किसी एक एक्सएमएल रिसॉर्स फ़ाइल में सब-टाइप तय करें. इसके लिए, <subtype> एलिमेंट का इस्तेमाल करें. यहां दिए गए कोड स्निपेट में, दो सब-टाइप वाले आईएमई के बारे में बताया गया है: पहला, अमेरिका की अंग्रेज़ी भाषा के लिए कीबोर्ड सब-टाइप और दूसरा, फ़्रांस की फ़्रेंच भाषा के लिए कीबोर्ड सब-टाइप:

<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>

यूज़र इंटरफ़ेस (यूआई) में आपके सब-टाइप को सही तरीके से लेबल किया गया है, यह पक्का करने के लिए `%s` का इस्तेमाल करें. इससे आपको सब-टाइप का ऐसा लेबल मिलेगा जो सब-टाइप के स्थान-भाषा लेबल जैसा ही होगा. इसे अगले दो कोड स्निपेट में दिखाया गया है. पहले स्निपेट में, इनपुट के तरीके की एक्सएमएल फ़ाइल का हिस्सा दिखाया गया है:

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

अगला स्निपेट, आईएमई की strings.xml फ़ाइल का हिस्सा है. स्ट्रिंग रिसॉर्स label_subtype_generic का इस्तेमाल, इनपुट के तरीके के यूज़र इंटरफ़ेस (यूआई) की परिभाषा में, सब-टाइप का लेबल सेट करने के लिए किया जाता है. इसे इस तरह से तय किया जाता है:

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

इस सेटिंग की वजह से, सबटाइप का डिसप्ले नेम, स्थान-भाषा की सेटिंग से मैच करता है. उदाहरण के लिए, किसी भी अंग्रेज़ी स्थान-भाषा में, डिसप्ले नेम “English (United States)” होता है.

सूचना बार से आईएमई के सब-टाइप चुनना

Android सिस्टम, सभी आईएमई से मिलने वाले सभी सब-टाइप को मैनेज करता है. आईएमई के सबटाइप को, आईएमई के मोड के तौर पर माना जाता है. उपयोगकर्ता, सूचना बार या सेटिंग ऐप्लिकेशन से, आईएमई के उपलब्ध सब-टाइप के मेन्यू पर जा सकता है. जैसा कि इस इमेज में दिखाया गया है:

भाषाएं और इनपुट सिस्टम मेन्यू दिखाने वाली इमेज
चौथी इमेज. भाषाएं और इनपुट सिस्टम मेन्यू.

सिस्टम सेटिंग से आईएमई के सब-टाइप चुनना

उपयोगकर्ता, सिस्टम की सेटिंग में भाषा और इनपुट सेटिंग पैनल में जाकर, सब-टाइप इस्तेमाल करने का तरीका भी कंट्रोल कर सकता है:

इमेज में भाषा चुनने का मेन्यू दिख रहा है
पांचवीं इमेज. भाषाएं सिस्टम मेन्यू

आईएमई के सब-टाइप के बीच स्विच करना

उपयोगकर्ताओं को आईएमई के सब-टाइप के बीच आसानी से स्विच करने की सुविधा दी जा सकती है. इसके लिए, उन्हें स्विच कुंजी उपलब्ध कराई जा सकती है. जैसे, कीबोर्ड पर ग्लोब के आकार वाला भाषा का आइकॉन. इससे कीबोर्ड को इस्तेमाल करना आसान हो जाता है और उपयोगकर्ता को सुविधा मिलती है. इस सुविधा को चालू करने के लिए, यह तरीका अपनाएं:

  1. इनपुट के तरीके की एक्सएमएल रिसॉर्स फ़ाइलों में supportsSwitchingToNextInputMethod = "true" का एलान करें. आपकी जानकारी, यहां दिए गए कोड स्निपेट जैसी होनी चाहिए:
    <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 पास करें. 'गलत' वैल्यू से सिस्टम को पता चलता है कि सभी सब-टाइप को एक जैसा माना जाए. भले ही, वे किसी भी आईएमई से जुड़े हों. 'सही है' पर सेट करने पर, सिस्टम को मौजूदा आईएमई में सब-टाइप के बीच स्विच करना होगा.

आईएमई से जुड़ी सामान्य बातें

आईएमई लागू करते समय, इन बातों का भी ध्यान रखें:

  • उपयोगकर्ताओं को आईएमई के यूज़र इंटरफ़ेस (यूआई) से सीधे विकल्प सेट करने का तरीका उपलब्ध कराएं.
  • उपयोगकर्ताओं को इनपुट तरीके के यूज़र इंटरफ़ेस (यूआई) से सीधे किसी दूसरे आईएमई पर स्विच करने का तरीका उपलब्ध कराएं, क्योंकि डिवाइस पर कई आईएमई इंस्टॉल हो सकते हैं.
  • आईएमई का यूज़र इंटरफ़ेस (यूआई) तुरंत खोलना. किसी भी बड़े रिसॉर्स को पहले से लोड करें या ज़रूरत पड़ने पर लोड करें, ताकि उपयोगकर्ताओं को टेक्स्ट फ़ील्ड पर टैप करते ही आईएमई दिखे. इनपुट के तरीके को बाद में इस्तेमाल करने के लिए, कैश मेमोरी में मौजूद संसाधनों और व्यू को सेव करें.
  • इनपुट मेथड विंडो के छिपने के तुरंत बाद, मेमोरी के बड़े हिस्से को खाली कर दें, ताकि ऐप्लिकेशन को चलाने के लिए ज़रूरत के मुताबिक मेमोरी उपलब्ध हो. अगर आईएमई कुछ सेकंड के लिए छिपा हुआ है, तो संसाधनों को रिलीज़ करने के लिए, देरी से भेजे जाने वाले मैसेज का इस्तेमाल करें.
  • पक्का करें कि उपयोगकर्ता, आईएमई से जुड़ी भाषा या स्थान-भाषा के लिए ज़्यादा से ज़्यादा वर्ण डाल सकें. उपयोगकर्ता, पासवर्ड या उपयोगकर्ता नाम में विराम चिह्न इस्तेमाल कर सकते हैं. इसलिए, आपके आईएमई को कई अलग-अलग वर्ण उपलब्ध कराने चाहिए, ताकि उपयोगकर्ता पासवर्ड डालकर डिवाइस को ऐक्सेस कर सकें.