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

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

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

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

अगर आपने IME का इस्तेमाल नहीं किया है, तो पहले स्क्रीन पर दिखने वाले इनपुट मेथड के बारे में जानकारी देने वाला लेख पढ़ें.

IME का लाइफ़साइकल

इस डायग्राम में, IME के लाइफ़साइकल के बारे में बताया गया है:

इस इमेज में, आईएमई के लाइफ़ साइकल को दिखाया गया है.
पहली इमेज. किसी IME का लाइफ़साइकल.

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

मेनिफ़ेस्ट में IME कॉम्पोनेंट के बारे में जानकारी देना

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

नीचे दिए गए स्निपेट में, IME सेवा के बारे में बताया गया है. यह BIND_INPUT_METHOD अनुमति का अनुरोध करता है, ताकि सेवा, IME को सिस्टम से कनेक्ट कर सके. यह 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 के लिए सेटिंग गतिविधि के बारे में बताता है. इसमें 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 से जुड़ी क्लास, android.inputmethodservice और android.view.inputmethod पैकेज में मिलती हैं. कीबोर्ड के वर्णों को मैनेज करने के लिए, KeyEvent क्लास का इस्तेमाल करना ज़रूरी है.

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

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

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

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

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

इनपुट व्यू

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

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

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

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

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

एक से ज़्यादा स्क्रीन साइज़ को मैनेज करना

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

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

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

उदाहरण के लिए, यहां Android प्लैटफ़ॉर्म पर टेक्स्ट डालने के लिए, Latin IME का इंटरफ़ेस दिखाया गया है:

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

यहां Android प्लैटफ़ॉर्म के लिए, लैटिन IME का इंटरफ़ेस दिया गया है. इसमें संख्यात्मक इनपुट की सुविधा मिलती है:

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

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

ऐप्लिकेशन को मैसेज भेजना

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

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

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

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

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

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

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

IME का सबटाइप बनाना

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

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

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

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

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

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

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

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

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

सूचना बार से IME के सबटाइप चुनना

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

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

सिस्टम सेटिंग में जाकर, IME के सबटाइप चुनना

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

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

IME के सबटाइप के बीच स्विच करना

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

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

IME से जुड़ी सामान्य बातें

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

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