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

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

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

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

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

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

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

अलग-अलग स्क्रीन साइज़ को हैंडल करना

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

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

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

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

अगर आपका 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);

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

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

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

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

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

उप-प्रकार की मदद से IME, 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 को कई अलग-अलग वर्ण उपलब्ध कराने होंगे, ताकि उपयोगकर्ता पासवर्ड डाल सकें और डिवाइस को ऐक्सेस कर सकें.