রোটারি ইনপুট

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

দ্রষ্টব্য: এই নির্দেশিকাটি মূলত ভিউ-ভিত্তিক UI ব্যবহার করে ঘূর্ণমান ইনপুট পরিচালনা করার জন্য নির্দেশ করে। Wear OS এর জন্য কম্পোজ ব্যবহার করে ঘূর্ণমান ইনপুট পরিচালনার বিষয়ে আরও তথ্যের জন্য, রচনায় রোটারি ইনপুট দেখুন।

অনেক স্ক্রোলযোগ্য কন্টেইনার, যেমন ScrollView , ListView , HorizontalScrollView , এবং WearableRecyclerView , কোন Wear OS-নির্দিষ্ট কোডের প্রয়োজন ছাড়াই ফোকাস থাকলে রোটারি ইনপুট সমর্থন করে। ফোকাস থাকা একটি গুরুত্বপূর্ণ পূর্বশর্ত, কারণ Android 9 (API লেভেল 28) এবং উচ্চতর, ভিউগুলি স্পষ্টভাবে ফোকাস পায় না।

সেরা অভ্যাস ফোকাস

ঘূর্ণমান ইনপুট ইভেন্টগুলিতে প্রতিক্রিয়া জানাতে, একটি স্ক্রোলযোগ্য পাত্রে অবশ্যই ফোকাস থাকতে হবে। রোটারি ইনপুট ইভেন্টগুলি ভিউ শ্রেণীবিন্যাসকে বুদবুদ করে না। যদি কোন ফোকাসড ভিউ না থাকে, অথবা যদি ফোকাস করা ভিউ View.onGenericMotionEvent() থেকে false রিটার্ন করে, তাহলে ইভেন্টটি Activity.onGenericMotionEvent() এ পাঠানো হবে।

রোটারি ইনপুট ইভেন্টগুলিতে প্রতিক্রিয়া জানানোর জন্য নিম্নলিখিতগুলি সেরা অনুশীলনগুলি রয়েছে:

  • মনে রাখবেন যে, ডিফল্টরূপে, কোনো অ্যাক্টিভিটি চালু করা বা এমনকি কোনো ভিউতে ট্যাপ করলেও এটি ফোকাস করা যায় না, এমনকি এটি ফোকাসযোগ্য হলেও। আপনার ভিউ ফোকাস দিতে, ভিউটিকে অবশ্যই <requestFocus /> ট্যাগ ব্যবহার করতে হবে অথবা ম্যানুয়ালি View.requestFocus() কল করতে হবে।
  • android:focusable="true" এবং android:focusableInTouchMode="true" উভয় ব্যবহার করে কাস্টম স্ক্রোলযোগ্য দৃশ্যগুলিকে ফোকাসযোগ্য হিসাবে চিহ্নিত করুন৷
  • Activity.onCreate() এর পরে যদি আপনার স্ক্রোলযোগ্য ভিউ সংযুক্ত থাকে —উদাহরণস্বরূপ, আপনার UI তৈরি করার আগে একটি নেটওয়ার্ক অনুরোধ শেষ হওয়ার জন্য অপেক্ষা করুন, এটি সংযুক্ত করার পরে requestFocus() কল করুন।
  • যদি আপনার স্ক্রোলযোগ্য দৃশ্যটি প্রাথমিকভাবে INVISIBLE বা GONE , আপনি যখন এটিকে VISIBLE এ সেট করেন তখন requestFocus() এ কল করুন।
  • যদি আপনার কার্যকলাপে একাধিক স্ক্রোলযোগ্য দৃশ্য থাকে, <requestFocus /> ট্যাগ ব্যবহার করে ফোকাস করার জন্য একটি বেছে নিন। ঘূর্ণায়মান সাইড বোতামের সাথে নেস্টেড স্ক্রোলিং সমর্থিত নয়।
  • যদি আপনার UI-তে অন্য কিছু থাকে যা ব্যবহারকারীর সাথে ইন্টারঅ্যাক্ট করার সময় ফোকাস নেয়—উদাহরণস্বরূপ, একটি InputText , ব্যবহারকারীকে স্ক্রোলযোগ্য ভিউতে ফোকাস পুনরুদ্ধার করার একটি উপায় দিন যদি এটি স্ক্রোলযোগ্য ভিউতে ট্যাপগুলি শুনে এবং requestFocus() কল করে ফোকাস হারায় requestFocus() উত্তরে।

কাস্টম ঘূর্ণন আচরণ

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

নিম্নলিখিত কোড স্নিপেট দেখায় কিভাবে MotionEvent , InputDeviceCompat , এবং ViewConfigurationCompat আপনার ভিউতে কাস্টম স্ক্রলিং যোগ করতে ব্যবহার করতে হয়:

কোটলিন

myView.setOnGenericMotionListener { v, ev ->
  if (ev.action == MotionEvent.ACTION_SCROLL &&
      ev.isFromSource(InputDeviceCompat.SOURCE_ROTARY_ENCODER)
  ) {
    // Don't forget the negation here
    val delta = -ev.getAxisValue(MotionEventCompat.AXIS_SCROLL) *
        ViewConfigurationCompat.getScaledVerticalScrollFactor(
             ViewConfiguration.get(context), context
        )
    // Swap these axes to scroll horizontally instead
    v.scrollBy(0, delta.roundToInt())
    true
  } else {
    false
  }
}

জাভা

myView.setOnGenericMotionListener(new View.OnGenericMotionListener() {
  @Override
  public boolean onGenericMotion(View v, MotionEvent ev) {
    if (ev.getAction() == MotionEvent.ACTION_SCROLL &&
        ev.isFromSource(InputDeviceCompat.SOURCE_ROTARY_ENCODER)
    ) {
      // Don't forget the negation here
      float delta = -ev.getAxisValue(MotionEventCompat.AXIS_SCROLL) *
          ViewConfigurationCompat.getScaledVerticalScrollFactor(
               ViewConfiguration.get(context), context
          );

      // Swap these axes to scroll horizontally instead
      v.scrollBy(0, Math.round(delta));

      return true;
    }
    return false;
  }
});

একটি এমুলেটর ব্যবহার করে পরীক্ষা করুন

একটি Wear ডিভাইসে রোটারি ইনপুট স্ক্রলিং অনুকরণ করতে Android এমুলেটর ব্যবহার করুন। আপনার প্রোজেক্ট চালানোর জন্য এমুলেটরে আপনার Wear অ্যাপ চালু করুন বা এটি ইনস্টল করতে এমুলেটরে একটি APK ফাইল টেনে আনুন।

এমুলেটরে রোটারি ইনপুট পরীক্ষা করতে:

  1. SDK ম্যানেজার থেকে, Android এমুলেটর 26.0.3 বা উচ্চতর পেতে SDK টুল ট্যাব ব্যবহার করুন৷
  2. অ্যান্ড্রয়েড স্টুডিওতে, টুলস > অ্যান্ড্রয়েড > AVD ম্যানেজার নির্বাচন করুন। API 25 বা উচ্চতর দিয়ে একটি নতুন Wear ডিভাইস তৈরি করুন
  3. অ্যান্ড্রয়েড স্টুডিও থেকে এমুলেটর চালান
  4. এমুলেটর টুলবারের নীচে তিন-বিন্দু ওভারফ্লো মেনুতে ক্লিক করুন। রোটারি ইনপুট ইন্টারফেস খুলতে নতুন উইন্ডোতে রোটারি ইনপুট ট্যাবে ক্লিক করুন এবং রোটারি ইনপুট স্ক্রোলিং চেষ্টা করুন।

নিম্নলিখিত ভিডিওটি এমুলেটরে রোটারি ইনপুট দেখায়: