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

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

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

इस पेज पर ये विषय शामिल हैं:

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

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

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

IME के लाइफ़ साइकल को दिखाने वाली इमेज.
पहला डायग्राम. किसी IME की लाइफ़साइकल.

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

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

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

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

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

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

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

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

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

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

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

इनपुट व्यू

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

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

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

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

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

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() तरीका कॉल करें जिन्हें आपको खुद मैनेज नहीं करना है.

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

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

  • कोई स्थानीय भाषा, जैसे कि en_US या fr_FR
  • इनपुट मोड, जैसे कि वॉइस, कीबोर्ड या लिखावट
  • IME के लिए खास तौर पर उपलब्ध अन्य इनपुट स्टाइल, फ़ॉर्म या प्रॉपर्टी, जैसे कि 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>

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

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

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

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

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

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

IME लागू करते समय, इन बातों का ध्यान रखें:

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