একটি ইনপুট পদ্ধতি তৈরি করুন

একটি ইনপুট পদ্ধতি সম্পাদক (IME) হল একটি ব্যবহারকারী নিয়ন্ত্রণ যা ব্যবহারকারীদের পাঠ্য প্রবেশ করতে দেয়। অ্যান্ড্রয়েড একটি এক্সটেনসিবল ইনপুট-পদ্ধতি ফ্রেমওয়ার্ক প্রদান করে যা অ্যাপ্লিকেশনগুলিকে ব্যবহারকারীদের বিকল্প ইনপুট পদ্ধতি প্রদান করতে দেয়, যেমন অন-স্ক্রীন কীবোর্ড বা স্পিচ ইনপুট। IMEs ইনস্টল করার পরে, ব্যবহারকারী সিস্টেম সেটিংস থেকে একটি নির্বাচন করতে পারেন এবং পুরো সিস্টেম জুড়ে এটি ব্যবহার করতে পারেন। একবারে শুধুমাত্র একটি IME সক্ষম করা যেতে পারে৷

অ্যান্ড্রয়েড সিস্টেমে একটি আইএমই যোগ করতে, একটি শ্রেণী সম্বলিত একটি অ্যান্ড্রয়েড অ্যাপ্লিকেশন তৈরি করুন যা InputMethodService প্রসারিত করে। উপরন্তু, আপনি সাধারণত একটি "সেটিংস" কার্যকলাপ তৈরি করেন যা IME পরিষেবাতে বিকল্পগুলি পাস করে। আপনি একটি সেটিংস UI সংজ্ঞায়িত করতে পারেন যা সিস্টেম সেটিংসের অংশ হিসাবে প্রদর্শিত হয়৷

এই পৃষ্ঠাটি নিম্নলিখিত বিষয়গুলি কভার করে:

আপনি যদি IME-এর সাথে কাজ না করে থাকেন, তাহলে প্রথমে অন-স্ক্রীন ইনপুট মেথডগুলি পড়ুন।

IME জীবনচক্র

নিম্নলিখিত চিত্রটি একটি IME এর জীবনচক্র বর্ণনা করে:

একটি IME এর জীবনচক্র দেখানো একটি চিত্র৷
চিত্র 1. একটি IME এর জীবনচক্র।

নিম্নলিখিত বিভাগগুলি বর্ণনা করে যে কীভাবে এই জীবনচক্র অনুসরণ করে এমন একটি IME-এর সাথে যুক্ত UI এবং কোড প্রয়োগ করতে হয়।

ম্যানিফেস্টে 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>

এছাড়াও আপনি সরাসরি এর UI থেকে IME এর সেটিংসে অ্যাক্সেস প্রদান করতে পারেন।

ইনপুট পদ্ধতি API

IME-এর জন্য নির্দিষ্ট ক্লাসগুলি android.inputmethodservice এবং android.view.inputmethod প্যাকেজে পাওয়া যায়। কীবোর্ড অক্ষর পরিচালনার জন্য KeyEvent ক্লাস গুরুত্বপূর্ণ।

একটি IME-এর কেন্দ্রীয় অংশ হল একটি পরিষেবা উপাদান—একটি শ্রেণী যা InputMethodService প্রসারিত করে। সাধারণ পরিষেবা জীবনচক্র বাস্তবায়নের পাশাপাশি, এই ক্লাসে আপনার IME এর UI প্রদান, ব্যবহারকারীর ইনপুট পরিচালনা এবং ফোকাস আছে এমন ক্ষেত্রে পাঠ্য সরবরাহ করার জন্য কলব্যাক রয়েছে। ডিফল্টরূপে, InputMethodService ক্লাসটি IME-এর অবস্থা এবং দৃশ্যমানতা এবং বর্তমান ইনপুট ক্ষেত্রের সাথে যোগাযোগ করার জন্য বেশিরভাগ বাস্তবায়ন প্রদান করে।

নিম্নলিখিত ক্লাসগুলিও গুরুত্বপূর্ণ:

BaseInputConnection
একটি InputMethod থেকে যে অ্যাপ্লিকেশনটি তার ইনপুট গ্রহণ করছে সেখানে যোগাযোগের চ্যানেলটিকে সংজ্ঞায়িত করে৷ আপনি এটি কার্সারের চারপাশে পাঠ্য পড়তে, পাঠ্য বাক্সে পাঠ্য পাঠাতে এবং অ্যাপ্লিকেশনটিতে কাঁচা কী ইভেন্টগুলি পাঠাতে ব্যবহার করেন। বেস ইন্টারফেস InputConnection প্রয়োগ করার পরিবর্তে অ্যাপ্লিকেশনগুলিকে অবশ্যই এই ক্লাসটি প্রসারিত করতে হবে।
KeyboardView
View এর একটি এক্সটেনশন যা একটি কীবোর্ড রেন্ডার করে এবং ব্যবহারকারীর ইনপুট ইভেন্টগুলিতে প্রতিক্রিয়া জানায়৷ কীবোর্ড লেআউটটি Keyboard একটি উদাহরণ দ্বারা নির্দিষ্ট করা হয়, যা আপনি একটি XML ফাইলে সংজ্ঞায়িত করতে পারেন।

ইনপুট পদ্ধতি UI ডিজাইন করুন

একটি IME এর জন্য দুটি প্রধান ভিজ্যুয়াল উপাদান রয়েছে: ইনপুট ভিউ এবং প্রার্থীদের ভিউ। আপনি যে ইনপুট পদ্ধতিটি ডিজাইন করছেন তার সাথে প্রাসঙ্গিক উপাদানগুলিকে বাস্তবায়ন করতে হবে।

ইনপুট ভিউ

ইনপুট ভিউ হল UI যেখানে ব্যবহারকারী কী-ক্লিক, হাতের লেখা বা অঙ্গভঙ্গি আকারে পাঠ্য ইনপুট করে। IME প্রথমবার প্রদর্শিত হলে, সিস্টেমটি onCreateInputView() কলব্যাক কল করে। এই পদ্ধতির প্রয়োগে, আপনি যে লেআউটটি IME উইন্ডোতে প্রদর্শন করতে চান তা তৈরি করুন এবং সিস্টেমে লেআউটটি ফিরিয়ে দিন। নিম্নলিখিত স্নিপেট onCreateInputView() পদ্ধতি বাস্তবায়নের একটি উদাহরণ দেখায়:

কোটলিন

override fun onCreateInputView(): View {
    return layoutInflater.inflate(R.layout.input, null).apply {
        if (this is MyKeyboardView) {
            setOnKeyboardActionListener(this@MyInputMethod)
            keyboard = latinKeyboard
        }
    }
}

জাভা

@Override
public View onCreateInputView() {
    MyKeyboardView inputView =
        (MyKeyboardView) getLayoutInflater().inflate(R.layout.input, null);

    inputView.setOnKeyboardActionListener(this);
    inputView.setKeyboard(latinKeyboard);

    return inputView;
}

এই উদাহরণে, MyKeyboardView হল KeyboardView এর কাস্টম বাস্তবায়নের একটি উদাহরণ যা একটি Keyboard রেন্ডার করে।

প্রার্থীদের দেখা

প্রার্থীদের ভিউ হল UI যেখানে IME সম্ভাব্য শব্দ সংশোধন বা ব্যবহারকারীর নির্বাচন করার জন্য পরামর্শ প্রদর্শন করে। IME লাইফসাইকেলে, সিস্টেমটি onCreateCandidatesView() কল করে যখন এটি প্রার্থীদের ভিউ প্রদর্শনের জন্য প্রস্তুত থাকে। এই পদ্ধতির আপনার বাস্তবায়নে, একটি লেআউট ফেরত দিন যা শব্দের পরামর্শ দেখায়, অথবা যদি আপনি কিছু দেখাতে না চান তাহলে শূন্য দিন। একটি নাল প্রতিক্রিয়া হল ডিফল্ট আচরণ, তাই আপনি যদি পরামর্শ প্রদান না করেন তবে আপনাকে এটি বাস্তবায়ন করতে হবে না।

UI ডিজাইন বিবেচনা

এই বিভাগটি IME-এর জন্য কিছু UI ডিজাইন বিবেচনার বর্ণনা দেয়।

একাধিক স্ক্রিন মাপ পরিচালনা করুন

আপনার IME-এর জন্য UI অবশ্যই বিভিন্ন স্ক্রীন মাপের জন্য স্কেল করতে এবং ল্যান্ডস্কেপ এবং পোর্ট্রেট অভিযোজন উভয়ই পরিচালনা করতে সক্ষম হতে হবে। নন-ফুলস্ক্রিন আইএমই মোডে, টেক্সট ক্ষেত্র এবং সংশ্লিষ্ট প্রসঙ্গ দেখানোর জন্য অ্যাপ্লিকেশনটির জন্য পর্যাপ্ত জায়গা ছেড়ে দিন, যাতে অর্ধেকের বেশি স্ক্রীন IME দ্বারা দখল করা না হয়। পূর্ণস্ক্রীন IME মোডে, এটি একটি সমস্যা নয়।

বিভিন্ন ধরনের ইনপুট পরিচালনা করুন

অ্যান্ড্রয়েড টেক্সট ফিল্ড আপনাকে একটি নির্দিষ্ট ইনপুট টাইপ সেট করতে দেয়, যেমন ফ্রি-ফর্ম টেক্সট, নম্বর, ইউআরএল, ইমেল অ্যাড্রেস এবং সার্চ স্ট্রিং। আপনি যখন একটি নতুন IME প্রয়োগ করেন, প্রতিটি ক্ষেত্রের ইনপুট প্রকার সনাক্ত করুন এবং এর জন্য উপযুক্ত ইন্টারফেস প্রদান করুন। যাইহোক, ব্যবহারকারী ইনপুট প্রকারের জন্য বৈধ পাঠ্য প্রবেশ করান কিনা তা পরীক্ষা করার জন্য আপনাকে আপনার IME সেট আপ করতে হবে না। এটি টেক্সট ফিল্ডের মালিক অ্যাপ্লিকেশনটির দায়িত্ব।

উদাহরণস্বরূপ, ল্যাটিন আইএমই অ্যান্ড্রয়েড প্ল্যাটফর্ম টেক্সট ইনপুটের জন্য যে ইন্টারফেস প্রদান করে তা এখানে রয়েছে:

একটি ল্যাটিন IME তে একটি পাঠ্য ইনপুট দেখানো একটি চিত্র৷
চিত্র 2. ল্যাটিন IME টেক্সট ইনপুট।

এবং এখানে ইন্টারফেসটি রয়েছে যা ল্যাটিন আইএমই অ্যান্ড্রয়েড প্ল্যাটফর্মের সাংখ্যিক ইনপুটের জন্য সরবরাহ করে:

একটি ল্যাটিন IME-এ একটি সংখ্যাসূচক ইনপুট দেখানো একটি চিত্র৷
চিত্র 3. ল্যাটিন IME সংখ্যাসূচক ইনপুট।

যখন একটি ইনপুট ক্ষেত্র ফোকাস গ্রহণ করে এবং আপনার IME শুরু হয়, তখন সিস্টেমটি কল করে onStartInputView() , একটি EditorInfo অবজেক্টে পাস করে যাতে ইনপুট টাইপ এবং পাঠ্য ক্ষেত্রের অন্যান্য বৈশিষ্ট্য সম্পর্কে বিশদ থাকে। এই অবজেক্টে, inputType ফিল্ডে টেক্সট ফিল্ডের ইনপুট টাইপ থাকে।

inputType ক্ষেত্র হল একটি int যা বিভিন্ন ইনপুট টাইপ সেটিংসের জন্য বিট প্যাটার্ন ধারণ করে। পাঠ্য ক্ষেত্রের ইনপুট প্রকারের জন্য এটি পরীক্ষা করতে, এটিকে ধ্রুবক TYPE_MASK_CLASS দিয়ে মাস্ক করুন, এইভাবে:

কোটলিন

inputType and InputType.TYPE_MASK_CLASS

জাভা

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 এর একটি রূপ। ইনপুট পদ্ধতি প্রকৃত পাঠ্যের পরিবর্তে dingbats প্রদর্শন করে।
TYPE_TEXT_VARIATION_URI
ওয়েব URL এবং অন্যান্য ইউনিফর্ম রিসোর্স আইডেন্টিফায়ার (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 কমিট করে এবং একটি নতুন কার্সার অবস্থান সেট করে।

উদাহরণ স্বরূপ, নিচের স্নিপেটটি দেখায় কিভাবে কার্সারের বাম দিকের চারটি অক্ষরকে "হ্যালো!" লেখা দিয়ে প্রতিস্থাপন করতে হয়:

কোটলিন

currentInputConnection.also { ic: InputConnection ->
    ic.deleteSurroundingText(4, 0)
    ic.commitText("Hello", 1)
    ic.commitText("!", 1)
}

জাভা

InputConnection ic = getCurrentInputConnection();
ic.deleteSurroundingText(4, 0);
ic.commitText("Hello", 1);
ic.commitText("!", 1);

প্রতিশ্রুতি দেওয়ার আগে পাঠ্য রচনা সমর্থন করুন

যদি আপনার IME পাঠ্যের পূর্বাভাস দেয় বা একটি গ্লিফ বা শব্দ রচনা করার জন্য একাধিক পদক্ষেপের প্রয়োজন হয়, আপনি পাঠ্য ক্ষেত্রের অগ্রগতি দেখাতে পারেন যতক্ষণ না ব্যবহারকারী শব্দটি প্রতিশ্রুতি দেয় এবং তারপর আপনি সম্পূর্ণ পাঠ্যের সাথে আংশিক রচনা প্রতিস্থাপন করতে পারেন। আপনি এটিকে setComposingText() এ পাস করার সময় এটিতে একটি স্প্যান যোগ করে পাঠ্যটিকে বিশেষ চিকিত্সা দিতে পারেন।

নিম্নলিখিত স্নিপেট দেখায় কিভাবে একটি পাঠ্য ক্ষেত্রে অগ্রগতি দেখাতে হয়:

কোটলিন

currentInputConnection.also { ic: InputConnection ->
    ic.setComposingText("Composi", 1)
    ic.setComposingText("Composin", 1)
    ic.commitText("Composing ", 1)
}

জাভা

InputConnection ic = getCurrentInputConnection();
ic.setComposingText("Composi", 1);
ic.setComposingText("Composin", 1);
ic.commitText("Composing ", 1);

হার্ডওয়্যার কী ইভেন্টগুলিকে বাধা দেয়

যদিও ইনপুট পদ্ধতি উইন্ডোতে স্পষ্ট ফোকাস নেই, এটি প্রথমে হার্ডওয়্যার কী ইভেন্টগুলি গ্রহণ করে এবং সেগুলিকে গ্রাস করতে পারে বা অ্যাপ্লিকেশনে ফরওয়ার্ড করতে পারে৷ উদাহরণস্বরূপ, আপনি রচনার সময় প্রার্থী নির্বাচনের জন্য আপনার UI এর মধ্যে নেভিগেট করার জন্য নির্দেশমূলক কীগুলি ব্যবহার করতে চাইতে পারেন। আপনি ইনপুট পদ্ধতি উইন্ডো থেকে উদ্ভূত কোনো ডায়ালগ খারিজ করতে পিছনের কীটি আটকাতে চাইতে পারেন।

হার্ডওয়্যার কী আটকাতে, onKeyDown() এবং onKeyUp() ওভাররাইড করুন।

আপনি নিজেকে পরিচালনা করতে চান না এমন কীগুলির জন্য super() পদ্ধতিতে কল করুন।

একটি IME সাবটাইপ তৈরি করুন

সাবটাইপগুলি IME-কে একটি IME দ্বারা সমর্থিত একাধিক ইনপুট মোড এবং ভাষা প্রকাশ করতে দেয়। একটি উপপ্রকার নিম্নলিখিত প্রতিনিধিত্ব করতে পারে:

  • একটি লোকেল, যেমন en_US বা fr_FR
  • একটি ইনপুট মোড, যেমন ভয়েস, কীবোর্ড বা হাতের লেখা
  • অন্যান্য ইনপুট শৈলী, ফর্ম, বা IME-এর জন্য নির্দিষ্ট বৈশিষ্ট্য, যেমন 10-কী বা QWERTY কীবোর্ড লেআউট

মোডটি যেকোনো পাঠ্য হতে পারে, যেমন "কীবোর্ড" বা "ভয়েস"। একটি সাবটাইপ এগুলির সংমিশ্রণও প্রকাশ করতে পারে।

সাবটাইপ তথ্য একটি IME সুইচার ডায়ালগের জন্য ব্যবহার করা হয় যা বিজ্ঞপ্তি বার থেকে পাওয়া যায় এবং IME সেটিংসের জন্য। তথ্যটি ফ্রেমওয়ার্ককে সরাসরি একটি IME-এর একটি নির্দিষ্ট সাব-টাইপ আনতে দেয়। আপনি যখন একটি আইএমই তৈরি করেন, সাব-টাইপ সুবিধা ব্যবহার করুন, কারণ এটি ব্যবহারকারীকে বিভিন্ন আইএমই ভাষা এবং মোড সনাক্ত করতে এবং পরিবর্তন করতে সহায়তা করে।

<subtype> উপাদান ব্যবহার করে ইনপুট পদ্ধতির XML রিসোর্স ফাইলগুলির একটিতে সাব-টাইপগুলি সংজ্ঞায়িত করুন। নিম্নলিখিত কোড স্নিপেট দুটি সাব-টাইপ সহ একটি 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>

আপনার সাব-টাইপগুলিকে UI-তে সঠিকভাবে লেবেল করা হয়েছে তা নিশ্চিত করতে, একটি সাব-টাইপ লেবেল পেতে `%s` ব্যবহার করুন যা সাব-টাইপের লোকেল লেবেলের মতো। এটি পরবর্তী দুটি কোড স্নিপেটে প্রদর্শিত হয়। প্রথম স্নিপেট ইনপুট পদ্ধতির XML ফাইলের অংশ দেখায়:

<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 , যা ইনপুট পদ্ধতি UI সংজ্ঞা দ্বারা সাব-টাইপের লেবেল সেট করার জন্য ব্যবহৃত হয়, নিম্নলিখিত হিসাবে সংজ্ঞায়িত করা হয়েছে:

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

এই সেটিংটি সাব-টাইপের প্রদর্শন নামকে লোকেল সেটিং এর সাথে মেলে। উদাহরণস্বরূপ, যেকোনো ইংরেজি লোকেলে, প্রদর্শনের নাম হল "ইংরেজি (মার্কিন যুক্তরাষ্ট্র)।"

বিজ্ঞপ্তি বার থেকে IME সাব-টাইপ নির্বাচন করুন

অ্যান্ড্রয়েড সিস্টেম সমস্ত আইএমই দ্বারা প্রকাশিত সমস্ত উপ-প্রকার পরিচালনা করে৷ IME সাবটাইপগুলিকে IME এর মোড হিসাবে বিবেচনা করা হয় যেগুলির সাথে তারা অন্তর্গত। ব্যবহারকারী নোটিফিকেশন বার বা সেটিংস অ্যাপ থেকে উপলভ্য IME সাব-টাইপগুলির একটি মেনুতে নেভিগেট করতে পারেন, যেমনটি নিম্নলিখিত চিত্রে দেখানো হয়েছে:

ভাষা এবং ইনপুট সিস্টেম মেনু দেখানো একটি ছবি
চিত্র 4. ভাষা ও ইনপুট সিস্টেম মেনু।

সিস্টেম সেটিংস থেকে IME সাবটাইপ নির্বাচন করুন

সিস্টেম সেটিংসে ভাষা এবং ইনপুট সেটিংস প্যানেলে কীভাবে উপপ্রকার ব্যবহার করা হয় তা ব্যবহারকারী নিয়ন্ত্রণ করতে পারেন:

ভাষা নির্বাচন মেনু দেখানো একটি ছবি
চিত্র 5. ভাষা সিস্টেম মেনু

IME সাবটাইপের মধ্যে পরিবর্তন করুন

আপনি কীবোর্ডে গ্লোব-আকৃতির ভাষা আইকনের মতো একটি সুইচিং কী প্রদান করে ব্যবহারকারীদের সহজেই IME সাব-টাইপগুলির মধ্যে স্যুইচ করতে দিতে পারেন। এটি কীবোর্ডের ব্যবহারযোগ্যতা উন্নত করে এবং ব্যবহারকারীর জন্য সুবিধাজনক। এই স্যুইচিং সক্ষম করতে, নিম্নলিখিত পদক্ষেপগুলি সম্পাদন করুন:

  1. ইনপুট পদ্ধতির XML রিসোর্স ফাইলে 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() কল করুন, মিথ্যা পাস করে। মিথ্যার একটি মান সিস্টেমকে বলে যে তারা যে আইএমই-এর অন্তর্গত হোক না কেন, সমস্ত উপ-প্রকারের সাথে সমানভাবে আচরণ করতে। ট্রু নির্দিষ্ট করার জন্য সিস্টেমটিকে বর্তমান IME-এ সাব-টাইপের মাধ্যমে চক্রাকারে যেতে হবে।

সাধারণ IME বিবেচনা

আপনার IME বাস্তবায়ন করার সময় এখানে অন্যান্য বিষয়গুলি বিবেচনা করতে হবে:

  • ব্যবহারকারীদের IME এর UI থেকে সরাসরি বিকল্প সেট করার একটি উপায় প্রদান করুন।
  • ব্যবহারকারীদের ইনপুট পদ্ধতি UI থেকে সরাসরি একটি ভিন্ন IME-এ স্যুইচ করার একটি উপায় প্রদান করুন, কারণ ডিভাইসে একাধিক IME ইনস্টল করা থাকতে পারে।
  • দ্রুত IME এর UI আনুন। প্রিলোড বা লোড অন ডিমান্ড কোনো বড় সম্পদ যাতে ব্যবহারকারীরা কোনো টেক্সট ফিল্ডে ট্যাপ করার সাথে সাথে IME দেখতে পান। ইনপুট পদ্ধতির পরবর্তী আহ্বানের জন্য ক্যাশে সংস্থান এবং ভিউ।
  • ইনপুট পদ্ধতি উইন্ডো লুকানোর সাথে সাথেই বড় মেমরি বরাদ্দ প্রকাশ করুন, যাতে অ্যাপ্লিকেশনগুলি চালানোর জন্য যথেষ্ট মেমরি থাকে। IME কয়েক সেকেন্ডের জন্য লুকানো থাকলে সম্পদ প্রকাশ করতে একটি বিলম্বিত বার্তা ব্যবহার করুন।
  • নিশ্চিত করুন যে ব্যবহারকারীরা IME এর সাথে যুক্ত ভাষা বা লোকেলের জন্য যতটা সম্ভব অক্ষর লিখতে পারেন৷ ব্যবহারকারীরা পাসওয়ার্ড বা ব্যবহারকারীর নামগুলিতে বিরাম চিহ্ন ব্যবহার করতে পারে, তাই ব্যবহারকারীদের একটি পাসওয়ার্ড লিখতে এবং ডিভাইস অ্যাক্সেস করতে দেওয়ার জন্য আপনার IME-কে অবশ্যই অনেকগুলি অক্ষর প্রদান করতে হবে।