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

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

Android সিস্টেমে IME যোগ করতে, এমন একটি ক্লাস সহ Android অ্যাপ্লিকেশন তৈরি করুন যা InputMethodService-এর এক্সটেনশন। এছাড়াও, আপনি সাধারণত একটি "সেটিংস" অ্যাক্টিভিটি তৈরি করেন যা IME পরিষেবায় বিকল্প পাস করে। এছাড়াও, আপনি সেটিংস UI নির্ধারণ করতে পারেন যা সিস্টেম সেটিংসের অংশ হিসেবে দেখানো হয়।

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

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

IME লাইফসাইকেল

নিম্নলিখিত ডায়াগ্রামটি একটি IME-এর লাইফসাইকেল বর্ণনা করে:

IME-এর লাইফ সাইকেল দেখানো ছবি।
ছবি ১. IME-এর লাইফসাইকেল।

নিম্নলিখিত বিভাগে বর্ণনা করা হয়েছে যে কীভাবে UI এবং কোড প্রয়োগ করতে হয় যা এই লাইফসাইকেল অনুসরণ করে এমন 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-এর UI থেকে সরাসরি এর সেটিংসে অ্যাক্সেস দিতে পারেন।

ইনপুট পদ্ধতি 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() পদ্ধতি প্রয়োগ করার উদাহরণ দেখানো হয়েছে:

Kotlin

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 মোডে, এটি কোনও সমস্যা নয়।

বিভিন্ন ধরনের ইনপুট ম্যানেজ করা

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

যেমন, Android প্ল্যাটফর্ম টেক্সট ইনপুটের জন্য ল্যাটিন IME যে ইন্টারফেস প্রদান করে তা এখানে দেওয়া হল:

ল্যাটিন IME-তে টেক্সট ইনপুট দেখানো ছবি
ছবি ২. ল্যাটিন IME টেক্সট ইনপুট।

And here here is the interface that the Latin IME provides for the Android platform numeric input:

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

কোনও ইনপুট ফিল্ড ফোকাস পেলে এবং আপনার IME শুরু হলে, সিস্টেম onStartInputView() কল করে, একটি EditorInfo অবজেক্ট পাস করে যার মধ্যে ইনপুট টাইপ এবং টেক্সট ফিল্ডের অন্যান্য অ্যাট্রিবিউট সম্পর্কে বিবরণ থাকে। এই অবজেক্টে, inputType ফিল্ডে টেক্সট ফিল্ডের ইনপুট টাইপ থাকে।

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

Kotlin

inputType and InputType.TYPE_MASK_CLASS

জাভা

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
ওয়েব 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 কমিট করে এবং কার্সরের নতুন পজিশন সেট করে।

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

Kotlin

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()-এ পাস করেন।

টেক্সট ফিল্ডে কীভাবে প্রোগ্রেস দেখাতে হয় তা নিম্নলিখিত স্নিপেট থেকে বোঝা যায়:

Kotlin

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-এর জন্য নির্দিষ্ট প্রপার্টি, যেমন ১০-কী বা QWERTY কীবোর্ড লেআউট

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

সাবটাইপ সংক্রান্ত তথ্য IME সুইচার ডায়ালগের জন্য ব্যবহার করা হয় যা বিজ্ঞপ্তি বার এবং IME সেটিংস থেকে উপলভ্য। এছাড়াও, এই তথ্য ফ্রেমওয়ার্ককে সরাসরি 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 সাবটাইপ বেছে নিন

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

ভাষা ও ইনপুট সিস্টেম মেনু দেখানো একটি ছবি
ছবি ৪. ভাষা ও ইনপুট সিস্টেম মেনু।

সিস্টেম সেটিংস থেকে IME সাবটাইপ বেছে নিন

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

ভাষা বেছে নেওয়ার মেনু দেখানো ছবি
ছবি ৫. ভাষা সিস্টেম মেনু

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() কল করুন, false পাস করুন। false ভ্যালু সিস্টেমকে বলে যে, সব সাবটাইপকে সমানভাবে বিবেচনা করতে হবে, সেগুলি যে IME-এরই হোক না কেন। 'ট্রু' (true) হিসেবে নির্দিষ্ট করার অর্থ হল, সিস্টেমকে বর্তমান IME-তে সাবটাইপের মাধ্যমে সাইকেল করতে হবে।

IME সংক্রান্ত সাধারণ বিবেচ্য বিষয়

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

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