इनपुट के तरीके का एडिटर (आईएमई) एक ऐसा कंट्रोल होता है जिसकी मदद से उपयोगकर्ता टेक्स्ट डाल सकते हैं. Android, एक एक्सटेंसिबल इनपुट-मेथड फ़्रेमवर्क उपलब्ध कराता है. इससे ऐप्लिकेशन, लोगों को इनपुट के अन्य तरीके उपलब्ध करा सकते हैं. जैसे, ऑन-स्क्रीन कीबोर्ड या बोले गए शब्दों का अपने-आप टाइप होना. IME इंस्टॉल करने के बाद, उपयोगकर्ता सिस्टम सेटिंग में जाकर कोई एक IME चुन सकता है. इसके बाद, वह इसका इस्तेमाल पूरे सिस्टम में कर सकता है. एक बार में सिर्फ़ एक IME चालू किया जा सकता है.
Android सिस्टम में IME जोड़ने के लिए, एक ऐसा Android ऐप्लिकेशन बनाएं जिसमें InputMethodService को बढ़ाने वाली क्लास हो.
इसके अलावा, आम तौर पर "सेटिंग" गतिविधि बनाई जाती है, जो IME सेवा को विकल्प पास करती है. सिस्टम सेटिंग के हिस्से के तौर पर दिखने वाला सेटिंग यूज़र इंटरफ़ेस (यूआई) भी तय किया जा सकता है.
इस पेज पर इन विषयों के बारे में जानकारी दी गई है:
- IME का लाइफ़साइकल
- ऐप्लिकेशन मेनिफ़ेस्ट में IME कॉम्पोनेंट का एलान करना
- IME API
- IME के यूज़र इंटरफ़ेस (यूआई) को डिज़ाइन करना
- किसी IME से किसी ऐप्लिकेशन में टेक्स्ट भेजना
- IME के सबटाइप का इस्तेमाल करना
- आईएमई से जुड़ी अन्य बातें
अगर आपने IME का इस्तेमाल नहीं किया है, तो पहले स्क्रीन पर दिखने वाले इनपुट मेथड के बारे में जानकारी देने वाला लेख पढ़ें.
IME का लाइफ़साइकल
इस डायग्राम में, IME के लाइफ़साइकल के बारे में बताया गया है:
यहां दिए गए सेक्शन में, इस लाइफ़साइकल को फ़ॉलो करने वाले आईएमई से जुड़े यूज़र इंटरफ़ेस (यूआई) और कोड को लागू करने का तरीका बताया गया है.
मेनिफ़ेस्ट में IME कॉम्पोनेंट के बारे में जानकारी देना
Android सिस्टम में, IME एक Android ऐप्लिकेशन होता है. इसमें IME की खास सेवा शामिल होती है. ऐप्लिकेशन की मेनिफ़ेस्ट फ़ाइल में, सेवा के बारे में जानकारी दी जानी चाहिए. साथ ही, ज़रूरी अनुमतियों का अनुरोध किया जाना चाहिए. इसके अलावा, कार्रवाई action.view.InputMethod से मेल खाने वाला इंटेंट फ़िल्टर और ऐसा मेटाडेटा दिया जाना चाहिए जो आईएमई की विशेषताओं के बारे में बताता हो. इसके अलावा, सेटिंग का ऐसा इंटरफ़ेस उपलब्ध कराया जा सकता है जिसकी मदद से उपयोगकर्ता, आईएमई के व्यवहार में बदलाव कर सके. इसके लिए, "सेटिंग" गतिविधि तय की जा सकती है. इसे सिस्टम सेटिंग से लॉन्च किया जा सकता है.
नीचे दिए गए स्निपेट में, 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 से जुड़ी क्लास, 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, स्क्रीन के आधे हिस्से से ज़्यादा जगह नहीं लेगा. फ़ुलस्क्रीन IME मोड में, यह समस्या नहीं होती.
अलग-अलग तरह के इनपुट को मैनेज करना
Android के टेक्स्ट फ़ील्ड में, इनपुट का कोई खास टाइप सेट किया जा सकता है. जैसे, फ़्री-फ़ॉर्म टेक्स्ट, संख्याएं, यूआरएल, ईमेल पते, और खोज स्ट्रिंग. नया IME लागू करते समय, हर फ़ील्ड के इनपुट टाइप का पता लगाएं और उसके लिए सही इंटरफ़ेस उपलब्ध कराएं. हालांकि, आपको यह देखने के लिए IME सेट अप करने की ज़रूरत नहीं है कि उपयोगकर्ता ने इनपुट टाइप के लिए मान्य टेक्स्ट डाला है या नहीं. यह टेक्स्ट फ़ील्ड के मालिक ऐप्लिकेशन की ज़िम्मेदारी है.
उदाहरण के लिए, यहां Android प्लैटफ़ॉर्म पर टेक्स्ट डालने के लिए, Latin 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- नंबर डालने के लिए टेक्स्ट फ़ील्ड. जैसा कि तीसरे फ़िगर में दिखाया गया है, लैटिन 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 सेटिंग में उपलब्ध होता है. इस जानकारी की मदद से, फ़्रेमवर्क सीधे तौर पर किसी खास तरह के आईएमई को भी दिखा सकता है. आईएमई बनाते समय, सबटाइप की सुविधा का इस्तेमाल करें. इससे उपयोगकर्ता को अलग-अलग आईएमई भाषाओं और मोड की पहचान करने और उनके बीच स्विच करने में मदद मिलती है.
<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" />
अगला स्निपेट, IME की strings.xml फ़ाइल का हिस्सा है. स्ट्रिंग रिसोर्स label_subtype_generic का इस्तेमाल, इनपुट मेथड के यूज़र इंटरफ़ेस (यूआई) की परिभाषा में सबटाइप का लेबल सेट करने के लिए किया जाता है. इसे इस तरह से तय किया जाता है:
<string name="label_subtype_generic">%s</string>इस सेटिंग की वजह से, सबटाइप का डिसप्ले नेम, स्थान-भाषा की सेटिंग से मेल खाता है. उदाहरण के लिए, किसी भी अंग्रेज़ी स्थान-भाषा में, डिसप्ले नेम “अंग्रेज़ी (अमेरिका)” होता है.
सूचना बार से IME के सबटाइप चुनना
Android सिस्टम, सभी IME के ज़रिए दिखाए गए सभी सबटाइप को मैनेज करता है. IME के सबटाइप को, उस IME के मोड के तौर पर माना जाता है जिससे वे जुड़े होते हैं. उपयोगकर्ता, सूचना बार या Settings ऐप्लिकेशन से उपलब्ध IME सबटाइप के मेन्यू पर जा सकता है. इसे यहां दिए गए डायग्राम में दिखाया गया है:
सिस्टम सेटिंग में जाकर, IME के सबटाइप चुनना
उपयोगकर्ता यह भी कंट्रोल कर सकता है कि सिस्टम की सेटिंग में, भाषा और इनपुट सेटिंग पैनल में सबटाइप का इस्तेमाल कैसे किया जाए:
IME के सबटाइप के बीच स्विच करना
उपयोगकर्ताओं को IME के सबटाइप के बीच आसानी से स्विच करने की सुविधा दी जा सकती है. इसके लिए, उन्हें स्विच करने की कुंजी दें. जैसे, कीबोर्ड पर मौजूद भाषा का ग्लोब के आकार वाला आइकॉन. इससे कीबोर्ड को इस्तेमाल करना आसान हो जाता है और उपयोगकर्ता को सुविधा मिलती है. स्विच करने की इस सुविधा को चालू करने के लिए, यह तरीका अपनाएं:
- इनपुट मेथड के एक्सएमएल रिसॉर्स फ़ाइलों में
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">
shouldOfferSwitchingToNextInputMethod()तरीके को कॉल करें.- अगर यह तरीका 'सही है' दिखाता है, तो स्विच करने का बटन दिखाएं.
- जब उपयोगकर्ता स्विचिंग बटन पर टैप करता है, तो कॉल
switchToNextInputMethod(), passing false. false वैल्यू से सिस्टम को यह पता चलता है कि सभी सबटाइप को एक जैसा माना जाए. भले ही, वे किसी भी आईएमई से जुड़े हों. 'सही है' वैल्यू सेट करने पर, सिस्टम को मौजूदा IME में मौजूद सबटाइप के बीच साइकल करना होता है.
IME से जुड़ी सामान्य बातें
आईएमई लागू करते समय, इन बातों का भी ध्यान रखें:
- उपयोगकर्ताओं को आईएमई के यूज़र इंटरफ़ेस (यूआई) से सीधे तौर पर विकल्प सेट करने का तरीका बताएं.
- उपयोगकर्ताओं को इनपुट मेथड यूज़र इंटरफ़ेस (यूआई) से ही, किसी दूसरे आईएमई पर स्विच करने का विकल्प दें, क्योंकि डिवाइस पर एक से ज़्यादा आईएमई इंस्टॉल हो सकते हैं.
- IME के यूज़र इंटरफ़ेस (यूआई) को तुरंत खोलें. किसी भी बड़े संसाधन को पहले से लोड करें या मांग पर लोड करें, ताकि उपयोगकर्ता जैसे ही किसी टेक्स्ट फ़ील्ड पर टैप करें उन्हें IME दिख जाए. यह कुकी, इनपुट के तरीके को बाद में लागू करने के लिए, संसाधनों और व्यू को कैश मेमोरी में सेव करती है.
- इनपुट मेथड विंडो के छिपने के तुरंत बाद, मेमोरी के बड़े ऐलोकेशन को रिलीज़ करें, ताकि ऐप्लिकेशन को चलाने के लिए ज़रूरी मेमोरी मिल सके. अगर आईएमई कुछ सेकंड के लिए छिपा हुआ है, तो संसाधनों को रिलीज़ करने के लिए, देरी से भेजे जाने वाले मैसेज का इस्तेमाल करें.
- पक्का करें कि उपयोगकर्ता, IME से जुड़ी भाषा या स्थान-भाषा के लिए ज़्यादा से ज़्यादा वर्ण डाल सकें. उपयोगकर्ता, पासवर्ड या उपयोगकर्ता नाम में विराम चिह्न का इस्तेमाल कर सकते हैं. इसलिए, आपके IME में कई तरह के वर्ण होने चाहिए, ताकि उपयोगकर्ता पासवर्ड डाल सकें और डिवाइस को ऐक्सेस कर सकें.