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

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

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

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

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

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

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

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

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

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

Android सिस्टम में, IME एक Android ऐप्लिकेशन होता है. इसमें IME की खास सेवा शामिल होती है. ऐप्लिकेशन की मेनिफ़ेस्ट फ़ाइल में, सेवा के बारे में जानकारी दी जानी चाहिए. साथ ही, ज़रूरी अनुमतियों का अनुरोध किया जाना चाहिए. इसके अलावा, कार्रवाई action.view.InputMethod से मेल खाने वाला इंटेंट फ़िल्टर और IME की विशेषताओं के बारे में बताने वाला मेटाडेटा भी दिया जाना चाहिए. इसके अलावा, सेटिंग का ऐसा इंटरफ़ेस उपलब्ध कराया जा सकता है जिसकी मदद से उपयोगकर्ता, 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 को बढ़ाती है. इस क्लास में, सामान्य सेवा के लाइफ़साइकल को लागू करने के साथ-साथ, कॉलबैक भी होते हैं. इनका इस्तेमाल, IME का यूज़र इंटरफ़ेस (यूआई) उपलब्ध कराने, उपयोगकर्ता के इनपुट को हैंडल करने, और फ़ोकस वाले फ़ील्ड में टेक्स्ट डिलीवर करने के लिए किया जाता है. डिफ़ॉल्ट रूप से, InputMethodService क्लास, IME की स्थिति और दिखने की सुविधा को मैनेज करने के लिए ज़्यादातर सुविधाएं उपलब्ध कराती है. साथ ही, यह मौजूदा इनपुट फ़ील्ड के साथ कम्यूनिकेट करती है.

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

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

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

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

इनपुट व्यू

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

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

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

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

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

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

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

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

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

यहां Android प्लैटफ़ॉर्म के लिए, लैटिन 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 में इनपुट के कई मोड और IME में काम करने वाली भाषाओं को दिखाया जा सकता है. सबटाइप, इन चीज़ों को दिखा सकता है:

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

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

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