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

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

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

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

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

IME লাইফসাইকেল

নিচের ডায়াগ্রামটি IME-এর জীবনচক্র বর্ণনা করে:

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

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

ম্যানিফেস্টে 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"
    andro@id:label="string/fast_input_label"
    android:permission="android.perm>issio<n.BIND_INPUT_>METHOD&qu<ot;
    intent-filter
        action android:nam>e=&qu<ot;android.vie>w.Inp<utMethod" /
    /intent-filter
    meta-data android:name="andro@id.view.im&qu>o<t;
     >          android:resource="xml/method" /
/service

পরের স্নিপেট IME-এর জন্য সেটিংস অ্যাক্টিভিটি ঘোষণা করে। এতে ACTION_MAIN-এর জন্য একটি ইনটেন্ট ফিল্টার আছে যা ইঙ্গিত করে যে এই অ্যাক্টিভিটি হল IME অ্যাপ্লিকেশনের মূল এন্ট্রি পয়েন্ট:

<!-- Optional: an activity for controlling the IME settings. -->
<activity android:name="FastInputIMESettings"
    andro@id:label="string/fast_>input<_settings&quo>t;
    in<tent-filter
        action android:name="and>roid.<intent.action.>M<AIN">/
    /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() কল করে যখন এটি সাজেস্ট করা ভিউ দেখানোর জন্য রেডি থাকে। এই পদ্ধতি প্রয়োগ করার সময়, এমন লেআউট রিটার্ন করুন যাতে শব্দের সাজেশন দেখানো হয় অথবা আপনি কিছু দেখাতে না চাইলে, null রিটার্ন করুন। কোনও উত্তর না দেওয়া হল ডিফল্ট আচরণ, তাই আপনি সাজেশন না দিলে আপনাকে এটি প্রয়োগ করতে হবে না।

UI ডিজাইন সংক্রান্ত বিবেচ্য বিষয়

এই বিভাগে IME-এর জন্য UI ডিজাইন সংক্রান্ত কিছু বিষয় বর্ণনা করা হয়েছে।

একাধিক স্ক্রিন সাইজ ম্যানেজ করা

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

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

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

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

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

এবং এখানে Android প্ল্যাটফর্মের জন্য ল্যাটিন IME-এর প্রদান করা ইন্টারফেস দেওয়া হল সংখ্যাসূচক ইনপুট:

ল্যাটিন 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
TYPE_CLASS_TEXT-এর একটি ভেরিয়েন্ট যা ওয়েব URL ও অন্যান্য ইউনিফর্ম রিসোর্স আইডেন্টিফায়ার (URI) লেখার জন্য ব্যবহার করা হয়।
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)
}

জাভা

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 ভাষা ও মোড শনাক্ত করতে এবং সেগুলির মধ্যে পরিবর্তন করতে সাহায্য করে।

ইনপুট পদ্ধতির XML রিসোর্স ফাইলের মধ্যে একটিতে, <subtype> এলিমেন্ট ব্যবহার করে সাবটাইপ নির্দিষ্ট করুন। নিম্নলিখিত কোড স্নিপেট দুটি সাবটাইপ সহ একটি IME নির্ধারণ করে: মার্কিন যুক্তরাষ্ট্রের ইংরেজি লোকেল এবং ফ্রান্সের জন্য ফরাসি ভাষার লোকেলে অন্য একটি কীবোর্ড সাবটাইপের জন্য একটি কীবোর্ড সাবটাইপ:

<input-method xmlns:android="http://schemas.android.com/apk/res/android"
        android:settingsActivity="com.example.softkeyboard.Settings"
  @      android:icon>=&quo<t;drawable/ime_icon&qu@ot;
    subtype android:name="string/display_name_english_keybo@ard_ime"
            android:icon="drawable/subtype_icon_english_keyboard_ime"
            android:languageTag="en-US"
            android:imeSubtypeMode="keyboard&quo>t;
  <          android:imeS@ubtypeExtraValue="somePrivateOption=true" /
    subtype a@ndroid:name="string/display_name_french_keyboard_ime"
            android:icon="drawable/subtype_icon_french_keyboard_ime"
            android:languageTag="fr-FR"
            android:i>meSub<typeMode="keyboar@d"
            android:imeSubtypeExtraVal>u<e="someV>ariable=30,someInternalOption=false" /
    subtype android:name="string/display_name_german_keyboard_ime" ... /
/input-method

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

<subtype
    android:label=&@quot;string/label_subtype_generic"
    android:imeSubtypeLocale="en_US"@;
    android:icon="drawable/icon_en_us"
    andro>id:imeSubtypeMode="keyboard" /

পরবর্তী স্নিপেটটি IME-এর strings.xml ফাইলের অংশ। ইনপুট পদ্ধতি UI সংজ্ঞা দ্বারা ব্যবহৃত স্ট্রিং রিসোর্স label_subtype_generic, যা সাবটাইপের লেবেল সেট করতে ব্যবহৃত হয়, তা নিম্নলিখিতভাবে সংজ্ঞায়িত করা হয়েছে:

<string name="label_subtype_gen>er<ic">;%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:supportsSwi>tchingToNextInputMethod="true"
  2. shouldOfferSwitchingToNextInputMethod() মেথড কল করুন।
  3. মেথডটি true রিটার্ন করলে, একটি সুইচিং কী দেখান।
  4. ব্যবহারকারী সুইচিং কী ট্যাপ করলে, কল switchToNextInputMethod(), ফলস পাস করে। false মানটি সিস্টেমকে বলে যে সব সাবটাইপকে সমানভাবে বিবেচনা করতে হবে, সেগুলি যে IME-এর অন্তর্গত হোক না কেন। true নির্দিষ্ট করলে, সিস্টেমকে বর্তমান IME-এর সাবটাইপগুলির মধ্যে সাইকেল করতে হবে।

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

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

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