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

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

लैटिन 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 सबमिट करता है और कर्सर की नई जगह सेट करता है.

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

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() को टेक्स्ट पास करते समय, उसमें स्पैन जोड़कर उसे खास तरीके से दिखाया जा सकता है.

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

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

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

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

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

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

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

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

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

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

यहां कुछ अन्य बातें बताई गई हैं जिन पर आपको अपना आईएमई लागू करते समय ध्यान देना चाहिए:

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