বড় পর্দায় ইনপুট সামঞ্জস্যতা

বড় স্ক্রিনের ডিভাইসে, ব্যবহারকারীরা প্রায়ই কীবোর্ড, মাউস, ট্র্যাকপ্যাড, স্টাইলাস বা গেমপ্যাড ব্যবহার করে অ্যাপের সাথে ইন্টারঅ্যাক্ট করে। বাহ্যিক ডিভাইসগুলি থেকে ইনপুট গ্রহণ করতে আপনার অ্যাপকে সক্ষম করতে, নিম্নলিখিতগুলি করুন:

  • প্রাথমিক কীবোর্ড সমর্থন পরীক্ষা করুন , যেমন পূর্বাবস্থার জন্য Ctrl+Z , অনুলিপির জন্য Ctrl+C এবং সংরক্ষণের জন্য Ctrl+S । ডিফল্ট কীবোর্ড শর্টকাটগুলির একটি তালিকার জন্য কীবোর্ড ক্রিয়াগুলি পরিচালনা করুন দেখুন৷
  • উন্নত কীবোর্ড সমর্থন পরীক্ষা করুন , উদাহরণস্বরূপ, ট্যাব কী এবং তীর কী কীবোর্ড নেভিগেশন, কী টেক্সট এন্ট্রি নিশ্চিতকরণ লিখুন এবং স্পেসবার মিডিয়া অ্যাপে প্লে এবং পজ করুন।
  • প্রসঙ্গ মেনুর জন্য ডান-ক্লিক, হোভারে আইকন পরিবর্তন এবং কাস্টম উপাদানগুলিতে মাউস হুইল বা ট্র্যাকপ্যাড স্ক্রোল ইভেন্ট সহ মৌলিক মাউস ইন্টারঅ্যাকশন পরীক্ষা করুন
  • স্টাইলাস, গেম কন্ট্রোলার এবং মিউজিক অ্যাপ MIDI কন্ট্রোলারের মতো অ্যাপ-নির্দিষ্ট ইনপুট ডিভাইস পরীক্ষা করুন
  • উন্নত ইনপুট সমর্থন বিবেচনা করুন যা অ্যাপটিকে ডেস্কটপ পরিবেশে আলাদা করে তুলতে পারে, উদাহরণস্বরূপ, DJ অ্যাপগুলির জন্য একটি ক্রস-ফ্যাডার হিসাবে টাচপ্যাড, গেমগুলির জন্য মাউস ক্যাপচার এবং কীবোর্ড-কেন্দ্রিক ব্যবহারকারীদের জন্য কীবোর্ড শর্টকাট৷

কীবোর্ড

আপনার অ্যাপ যেভাবে কীবোর্ড ইনপুটে সাড়া দেয় তা বড় স্ক্রিনের ব্যবহারকারীর অভিজ্ঞতায় অবদান রাখে। তিন ধরনের কীবোর্ড ইনপুট রয়েছে: নেভিগেশন , কীস্ট্রোক এবং শর্টকাট

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

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

var color by remember { mutableStateOf(Green) }
Box(
    Modifier
        .background(color)
        .onFocusChanged { color = if (it.isFocused) Blue else Green }
        .focusable()
) {
    Text("Focusable 1")
}

আরও তথ্যের জন্য, একটি রচনাযোগ্য ফোকাসযোগ্য করা দেখুন।

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

যাইহোক, কম্পোজ সবসময় ট্যাব এবং তালিকার মতো জটিল কম্পোজেবলের জন্য ট্যাবড নেভিগেশনের জন্য সঠিক পরবর্তী আইটেম নির্ধারণ করে না, উদাহরণস্বরূপ, যখন কম্পোজেবলগুলির মধ্যে একটি অনুভূমিক স্ক্রোলযোগ্য যা সম্পূর্ণরূপে দৃশ্যমান নয়।

ফোকাস আচরণ নিয়ন্ত্রণ করতে, কম্পোজেবলের সংগ্রহের প্যারেন্ট কম্পোজেবলে focusGroup মডিফায়ার যোগ করুন। ফোকাস গ্রুপে চলে যায়, তারপর পরবর্তী ফোকাসযোগ্য উপাদানে যাওয়ার আগে গ্রুপের মাধ্যমে, উদাহরণস্বরূপ:

Row {
    Column(Modifier.focusGroup()) {
        Button({}) { Text("Row1 Col1") }
        Button({}) { Text("Row2 Col1") }
        Button({}) { Text("Row3 Col1") }
    }
    Column(Modifier.focusGroup()) {
        Button({}) { Text("Row1 Col2") }
        Button({}) { Text("Row2 Col2") }
        Button({}) { Text("Row3 Col2") }
    }
}

আরও তথ্যের জন্য, ফোকাস গ্রুপগুলির সাথে সুসংগত নেভিগেশন প্রদান দেখুন।

শুধুমাত্র কীবোর্ড ব্যবহার করে আপনার অ্যাপের প্রতিটি UI উপাদানে অ্যাক্সেস পরীক্ষা করুন। প্রায়শই ব্যবহৃত উপাদানগুলি মাউস বা স্পর্শ ইনপুট ছাড়াই অ্যাক্সেসযোগ্য হওয়া উচিত।

মনে রাখবেন, অ্যাক্সেসিবিলিটি প্রয়োজন ব্যবহারকারীদের জন্য কীবোর্ড সমর্থন অপরিহার্য হতে পারে।

কীস্ট্রোক

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

কিছু উদাহরণ হল চ্যাট অ্যাপ যা একটি বার্তা পাঠাতে এন্টার কী ব্যবহার করে, মিডিয়া অ্যাপ যা স্পেসবার দিয়ে প্লেব্যাক শুরু এবং বন্ধ করে এবং গেমগুলি যেগুলি w , a , s , এবং d কীগুলির সাহায্যে গতিবিধি নিয়ন্ত্রণ করে৷

আপনি onKeyEvent সংশোধকের সাথে পৃথক কীস্ট্রোকগুলি পরিচালনা করতে পারেন, যা একটি ল্যাম্বডা গ্রহণ করে যাকে বলা হয় যখন পরিবর্তিত উপাদান একটি মূল ইভেন্ট গ্রহণ করে। KeyEvent#type প্রপার্টি আপনাকে ইভেন্টটি কী প্রেস ( KeyDown ) নাকি কী রিলিজ ( KeyUp ) তা নির্ধারণ করতে সক্ষম করে:

Box(
    modifier = Modifier.focusable().onKeyEvent {
        if(
            it.type == KeyEventType.KeyUp &&
            it.key == Key.S
        ) {
            doSomething()
            true
        } else {
            false
        }
    }
)  {
    Text("Press S key")
}

বিকল্পভাবে, আপনি onKeyUp() কলব্যাককে ওভাররাইড করতে পারেন এবং প্রতিটি প্রাপ্ত কীকোডের জন্য প্রত্যাশিত আচরণ যোগ করতে পারেন:

override fun onKeyUp(keyCode: Int, event: KeyEvent): Boolean {
    return when (keyCode) {
        KeyEvent.KEYCODE_ENTER -> {
            sendChatMessage()
            true
        }
        KeyEvent.KEYCODE_SPACE -> {
            playOrPauseMedia()
            true
        }
        else -> super.onKeyUp(keyCode, event)
    }
}

একটি কী রিলিজ হলে একটি onKeyUp ইভেন্ট ঘটে। কলব্যাক ব্যবহার করা অ্যাপগুলিকে একাধিক onKeyDown ইভেন্ট প্রক্রিয়া করতে বাধা দেয় যদি একটি কী চেপে রাখা হয় বা ধীরে ধীরে ছেড়ে দেওয়া হয়। যে গেমস এবং অ্যাপগুলিকে একটি কী চাপার মুহুর্তে শনাক্ত করতে হবে বা ব্যবহারকারী একটি কী চেপে ধরে আছে কিনা সেগুলি onKeyDown ইভেন্ট শুনতে পারে এবং বারবার onKeyDown ইভেন্টগুলি নিজেই পরিচালনা করতে পারে।

আরও তথ্যের জন্য, কীবোর্ড ক্রিয়াগুলি হ্যান্ডেল দেখুন।

শর্টকাট

একটি হার্ডওয়্যার কীবোর্ড ব্যবহার করার সময় Ctrl , Alt , Shift , এবং Meta কীগুলি অন্তর্ভুক্ত সাধারণ কীবোর্ড শর্টকাটগুলি প্রত্যাশিত৷ যদি একটি অ্যাপ শর্টকাট প্রয়োগ না করে, অভিজ্ঞতাটি ব্যবহারকারীদের কাছে হতাশাজনক বোধ করতে পারে। উন্নত ব্যবহারকারীরা প্রায়শই ব্যবহৃত অ্যাপ-নির্দিষ্ট কাজের জন্য শর্টকাটের প্রশংসা করে। শর্টকাট একটি অ্যাপ ব্যবহার করা সহজ করে এবং শর্টকাট নেই এমন অ্যাপ থেকে এটিকে আলাদা করে।

কিছু সাধারণ শর্টকাটের মধ্যে রয়েছে Ctrl+S (সংরক্ষণ), Ctrl+Z (আনডু), এবং Ctrl+Shift+Z (পুনরায় করুন)। ডিফল্ট শর্টকাটগুলির একটি তালিকার জন্য, কীবোর্ড ক্রিয়াগুলি পরিচালনা করুন দেখুন।

একটি KeyEvent অবজেক্টের নিম্নলিখিত বৈশিষ্ট্যগুলি রয়েছে যা নির্দেশ করে যে পরিবর্তনকারী কীগুলি চাপানো হয়েছে কিনা:

যেমন:

Box(
    Modifier.onKeyEvent {
        if (it.isAltPressed && it.key == Key.A) {
            println("Alt + A is pressed")
            true
        } else {
            false
        }
    }
    .focusable()
)

আরও তথ্যের জন্য, নিম্নলিখিত দেখুন:

লেখনী

অনেক বড় পর্দার ডিভাইস একটি স্টাইলাস সহ আসে। অ্যান্ড্রয়েড অ্যাপ্লিকেশানগুলি টাচস্ক্রিন ইনপুট হিসাবে স্টাইলগুলি পরিচালনা করে৷ কিছু ডিভাইসে একটি USB বা ব্লুটুথ ড্রয়িং টেবিলও থাকতে পারে, যেমন Wacom Intuos । অ্যান্ড্রয়েড অ্যাপ ব্লুটুথ ইনপুট গ্রহণ করতে পারে কিন্তু USB ইনপুট নয়।

স্টাইলাস MotionEvent অবজেক্ট অ্যাক্সেস করতে, অঙ্কন পৃষ্ঠে pointerInteropFilter সংশোধক যোগ করুন। মোশন ইভেন্টগুলিকে প্রক্রিয়া করে এমন একটি পদ্ধতি সহ একটি ViewModel ক্লাস প্রয়োগ করুন; pointerInteropFilter মডিফায়ারের onTouchEvent ল্যাম্বডা হিসাবে পদ্ধতিটি পাস করুন:

@Composable
@OptIn(ExperimentalComposeUiApi::class)
fun DrawArea(modifier: Modifier = Modifier) {
   Canvas(modifier = modifier
       .clipToBounds()
       .pointerInteropFilter {
           viewModel.processMotionEvent(it)
       }

   ) {
       // Drawing code here.
   }
}

MotionEvent অবজেক্টটিতে ইভেন্ট সম্পর্কে তথ্য রয়েছে:

ঐতিহাসিক পয়েন্ট

Android ব্যাচ ইনপুট ইভেন্ট এবং প্রতি ফ্রেমে একবার সেগুলি বিতরণ করে। একটি স্টাইলাস ডিসপ্লের চেয়ে অনেক বেশি ফ্রিকোয়েন্সিতে ইভেন্ট রিপোর্ট করতে পারে। অঙ্কন অ্যাপ্লিকেশন তৈরি করার সময়, getHistorical API ব্যবহার করে সাম্প্রতিক অতীতে হতে পারে এমন ইভেন্টগুলি পরীক্ষা করুন:

পাম প্রত্যাখ্যান

যখন ব্যবহারকারীরা স্টাইলাস ব্যবহার করে আপনার অ্যাপের সাথে আঁকেন, লেখেন বা ইন্টারঅ্যাক্ট করেন, তারা মাঝে মাঝে তাদের হাতের তালু দিয়ে স্ক্রীন স্পর্শ করে। টাচ ইভেন্টটি ( ACTION_DOWN বা ACTION_POINTER_DOWN এ সেট করা হয়েছে) আপনার অ্যাপ্লিকেশানে রিপোর্ট করা যেতে পারে তার আগে সিস্টেম অসাবধানতাবশত পামের স্পর্শকে স্বীকৃতি দেয় এবং উপেক্ষা করে৷

Android একটি MotionEvent পাঠানোর মাধ্যমে পাম টাচ ইভেন্ট বাতিল করে। যদি আপনার অ্যাপ ACTION_CANCEL পায়, তাহলে অঙ্গভঙ্গি বাতিল করুন। যদি আপনার অ্যাপ ACTION_POINTER_UP পায়, তাহলে FLAG_CANCELED সেট করা আছে কিনা তা পরীক্ষা করুন। যদি তাই হয়, অঙ্গভঙ্গি বাতিল.

শুধু FLAG_CANCELED এর জন্য চেক করবেন না। Android 13 (API স্তর 33) এবং উচ্চতর, সিস্টেম ACTION_CANCEL ইভেন্টগুলির জন্য FLAG_CANCELED সেট করে, কিন্তু সিস্টেমটি নিম্ন Android সংস্করণগুলিতে পতাকা সেট করে না।

অ্যান্ড্রয়েড 12

Android 12 (API লেভেল 32) এবং তার নিচের ক্ষেত্রে, পাম প্রত্যাখ্যান সনাক্তকরণ শুধুমাত্র একক-পয়েন্টার টাচ ইভেন্টের জন্য সম্ভব। যদি একটি পাম স্পর্শই একমাত্র পয়েন্টার হয়, তবে সিস্টেমটি মোশন ইভেন্ট অবজেক্টে ACTION_CANCEL সেট করে ইভেন্টটি বাতিল করে। অন্য পয়েন্টার ডাউন হলে, সিস্টেম ACTION_POINTER_UP সেট করে, যা পাম প্রত্যাখ্যান সনাক্তকরণের জন্য অপর্যাপ্ত।

অ্যান্ড্রয়েড 13

অ্যান্ড্রয়েড 13 (API লেভেল 33) এবং উচ্চতর ক্ষেত্রে, যদি একটি পাম টাচই একমাত্র পয়েন্টার হয়, তাহলে সিস্টেমটি মোশন ইভেন্ট অবজেক্টে ACTION_CANCEL এবং FLAG_CANCELED সেট করে ইভেন্টটি বাতিল করে। যদি অন্য পয়েন্টার ডাউন থাকে, সিস্টেম ACTION_POINTER_UP এবং FLAG_CANCELED সেট করে।

যখনই আপনার অ্যাপ ACTION_POINTER_UP এর সাথে একটি মোশন ইভেন্ট পায়, ইভেন্টটি পাম প্রত্যাখ্যান (বা অন্য ইভেন্ট বাতিলকরণ) নির্দেশ করে কিনা তা নির্ধারণ করতে FLAG_CANCELED পরীক্ষা করুন।

নোট নেওয়ার অ্যাপ

ChromeOS-এর একটি বিশেষ অভিপ্রায় রয়েছে যা ব্যবহারকারীদের কাছে নিবন্ধিত নোট গ্রহণের অ্যাপগুলিকে সারফেস করে৷ একটি নোট টেকিং অ্যাপ হিসাবে একটি অ্যাপ নিবন্ধন করতে, আপনার অ্যাপ ম্যানিফেস্টে নিম্নলিখিত যোগ করুন:

<intent-filter>
    <action android:name="org.chromium.arc.intent.action.CREATE_NOTE" />
    <category android:name="android.intent.category.DEFAULT" />
</intent-filter>

যখন একটি অ্যাপ সিস্টেমের সাথে নিবন্ধিত হয়, ব্যবহারকারী এটিকে ডিফল্ট নোট-টেকিং অ্যাপ হিসেবে নির্বাচন করতে পারেন। যখন একটি নতুন নোটের জন্য অনুরোধ করা হয়, অ্যাপটিকে স্টাইলাস ইনপুটের জন্য প্রস্তুত একটি খালি নোট তৈরি করা উচিত। যখন ব্যবহারকারী একটি চিত্রকে (যেমন একটি স্ক্রিনশট বা ডাউনলোড করা ছবি) টীকা করতে চান, তখন অ্যাপটি ClipData সহ একটি বা একাধিক আইটেম সহ content:// ইউআরআই সহ চালু হয়। অ্যাপটির এমন একটি নোট তৈরি করা উচিত যা প্রথম সংযুক্ত ছবিকে ব্যাকগ্রাউন্ড ইমেজ হিসেবে ব্যবহার করে এবং এমন একটি মোডে প্রবেশ করাতে হবে যেখানে ব্যবহারকারী স্ক্রিনে লেখনী দিয়ে আঁকতে পারে।

লেখনী ছাড়াই নোট নেওয়ার অভিপ্রায় পরীক্ষা করুন

[TBD বিভাগ সরান।]

কোনো অ্যাপ্লিকেশান সক্রিয় স্টাইলাস ছাড়াই নোট নেওয়ার অভিপ্রায়ে সঠিকভাবে সাড়া দেয় কিনা তা পরীক্ষা করতে, ChromeOS-এ নোট নেওয়ার বিকল্পগুলি প্রদর্শন করতে নিম্নলিখিত পদ্ধতিটি ব্যবহার করুন:

  1. ডেভ মোডে স্যুইচ করুন এবং ডিভাইসটিকে লেখার যোগ্য করুন
  2. একটি টার্মিনাল খুলতে Ctrl+Alt+F2 টিপুন
  3. sudo vi /etc/chrome_dev.conf কমান্ডটি চালান
  4. ফাইলের শেষে একটি নতুন লাইনে --ash-enable-palette এডিট করতে এবং যোগ করতে i টিপুন
  5. Esc টিপে সংরক্ষণ করুন এবং তারপরে টাইপ করুন : , w , q এবং এন্টার টিপুন
  6. নিয়মিত ChromeOS UI-এ ফিরে যেতে Ctrl+Alt+F1 টিপুন
  7. লগ আউট করুন, তারপর আবার লগ ইন করুন

একটি স্টাইলাস মেনু এখন শেলফে থাকা উচিত:

  • শেলফের স্টাইলাস বোতামটি আলতো চাপুন এবং নতুন নোট নির্বাচন করুন। এটি একটি ফাঁকা অঙ্কন নোট খুলতে হবে।
  • একটি স্ক্রিনশট নিন। শেল্ফ থেকে, স্টাইলাস বোতাম > ক্যাপচার স্ক্রীন নির্বাচন করুন বা একটি ছবি ডাউনলোড করুন। বিজ্ঞপ্তিতে ইমেজ টীকা করার বিকল্প থাকতে হবে। এটি টীকা করার জন্য প্রস্তুত চিত্র সহ অ্যাপটি চালু করা উচিত।

মাউস এবং টাচপ্যাড সমর্থন

বেশিরভাগ অ্যাপকে সাধারণত শুধুমাত্র তিনটি বড় স্ক্রীন-কেন্দ্রিক ইভেন্ট পরিচালনা করতে হয়: ডান-ক্লিক করুন , হোভার করুন এবং টেনে আনুন এবং ড্রপ করুন

রাইট-ক্লিক করুন

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

ডান-ক্লিক ইভেন্টগুলি পরিচালনা করতে, অ্যাপগুলির একটি View.OnContextClickListener নিবন্ধন করা উচিত।OnContextClickListener :

Box(modifier = Modifier.fillMaxSize()) {
    AndroidView(
        modifier = Modifier.fillMaxSize(),
        factory = { context ->
            val rootView = FrameLayout(context)
            val onContextClickListener =
                View.OnContextClickListener { view ->
                    showContextMenu()
                    true
                }
            rootView.setOnContextClickListener(onContextClickListener)
            rootView
        },
    )
}

প্রসঙ্গ মেনু নির্মাণের বিস্তারিত জানার জন্য, একটি প্রাসঙ্গিক মেনু তৈরি করুন দেখুন।

হোভার

হোভার ইভেন্টগুলি পরিচালনা করে আপনি আপনার অ্যাপ লেআউটগুলিকে মসৃণ এবং সহজে ব্যবহার করতে পারেন৷ এটি কাস্টম জন্য বিশেষভাবে সত্যউপাদান:

এর দুটি সবচেয়ে সাধারণ উদাহরণ হল:

  • মাউস পয়েন্টার আইকন পরিবর্তন করে ব্যবহারকারীদের নির্দেশ করে যে একটি উপাদানের ইন্টারেক্টিভ আচরণ আছে কিনা, যেমন ক্লিকযোগ্য বা সম্পাদনাযোগ্য
  • একটি বড় তালিকা বা গ্রিডে থাকা আইটেমগুলিতে ভিজ্যুয়াল ফিডব্যাক যোগ করা যখন পয়েন্টারটি তাদের উপর ঘোরাফেরা করছে

টেনে আনুন

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

ব্যবহারকারীরা আপনার অ্যাপে আইটেম টেনে আনতে পারে কিনা তা বিবেচনা করুন। উদাহরণস্বরূপ, ফটো এডিটরদের ফটোগুলি পাওয়ার আশা করা উচিত, অডিও প্লেয়ারদের অডিও ফাইলগুলি পাওয়ার আশা করা উচিত এবং অঙ্কন প্রোগ্রামগুলি ফটোগুলি পাওয়ার আশা করা উচিত।

ড্র্যাগ এবং ড্রপ সমর্থন যোগ করতে, দেখুনটেনে আনুন, এবং ChromeOS-এ অ্যান্ড্রয়েডের দিকে নজর দিন — ড্র্যাগ অ্যান্ড ড্রপ ব্লগ পোস্ট বাস্তবায়ন করা

ChromeOS এর জন্য বিশেষ বিবেচনা

উন্নত পয়েন্টার সমর্থন

মাউস এবং টাচপ্যাড ইনপুট উন্নত হ্যান্ডলিং যে অ্যাপ্লিকেশন একটি বাস্তবায়ন করা উচিতPointerEvent পেতে pointerInput সংশোধক:

@Composable
private fun LogPointerEvents(filter: PointerEventType? = null) {
    var log by remember { mutableStateOf("") }
    Column {
        Text(log)
        Box(
            Modifier
                .size(100.dp)
                .background(Color.Red)
                .pointerInput(filter) {
                    awaitPointerEventScope {
                        while (true) {
                            val event = awaitPointerEvent()
                            // handle pointer event
                            if (filter == null || event.type == filter) {
                                log = "${event.type}, ${event.changes.first().position}"
                            }
                        }
                    }
                }
        )
    }
}

নিম্নলিখিত নির্ধারণ করতে PointerEvent অবজেক্ট পরীক্ষা করুন:

  • PointerType : PointerEvent#changes থেকে মাউস, লেখনী, স্পর্শ এবং আরও অনেক কিছু
  • PointerEventType : পয়েন্টার অ্যাকশন, যেমন প্রেস, সরানো, স্ক্রোল এবং রিলিজ

গেম কন্ট্রোলার

কিছু বড় পর্দার অ্যান্ড্রয়েড ডিভাইস চারটি পর্যন্ত গেম কন্ট্রোলার সমর্থন করে। গেম কন্ট্রোলারগুলি পরিচালনা করতে স্ট্যান্ডার্ড অ্যান্ড্রয়েড গেম কন্ট্রোলার API ব্যবহার করুন ( সাপোর্ট গেম কন্ট্রোলার দেখুন)।

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

ইনপুট অনুবাদ মোড

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

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

<uses-feature
    android:name="android.hardware.type.pc"
    android:required="false" />

অতিরিক্ত সম্পদ