পরিধানে কব্জির অঙ্গভঙ্গি ব্যবহার করুন

একটি টাচ স্ক্রীন অসুবিধাজনক হলে কব্জি অঙ্গভঙ্গি আপনার অ্যাপের সাথে দ্রুত, এক হাতে মিথস্ক্রিয়া সক্ষম করতে পারে।

উদাহরণস্বরূপ, একজন ব্যবহারকারী এক হাতে এক কাপ জল অন্য হাতে ধরে রেখে বিজ্ঞপ্তিগুলির মাধ্যমে স্ক্রোল করতে পারেন। কব্জি অঙ্গভঙ্গি জন্য অন্যান্য ব্যবহারের ক্ষেত্রে নিম্নলিখিত অন্তর্ভুক্ত:

  • একটি জগিং অ্যাপে, উল্লম্ব স্ক্রিনের মাধ্যমে নেভিগেট করা যা গৃহীত পদক্ষেপ, অতিবাহিত সময় এবং বর্তমান গতি দেখায়
  • একটি ভ্রমণ অ্যাপে, ফ্লাইট এবং গেটের তথ্যের মাধ্যমে স্ক্রোল করা
  • একটি সংবাদ অ্যাপে, নিবন্ধগুলির মাধ্যমে স্ক্রোল করা হচ্ছে

ঘড়ির যন্ত্রে কব্জির অঙ্গভঙ্গি পর্যালোচনা করতে, সেটিংস > উন্নত বৈশিষ্ট্য > অঙ্গভঙ্গি > হাতের অঙ্গভঙ্গি চালু নির্বাচন করে নিশ্চিত করুন যে অঙ্গভঙ্গি চালু আছে। তারপর লঞ্চ টিউটোরিয়াল নির্বাচন করে ঘড়িতে অঙ্গভঙ্গি টিউটোরিয়ালটি সম্পূর্ণ করুন।

দ্রষ্টব্য: কব্জি কাঁপানো হল সিস্টেম-ব্যাপী পিছনে বা পূর্বাবস্থায় ফেরানো অঙ্গভঙ্গি এবং কাস্টমাইজ করার জন্য অ্যাপগুলির জন্য উপলব্ধ নয়৷

কব্জির অঙ্গভঙ্গি নিম্নলিখিত উপায়ে ব্যবহার করা যেতে পারে, যেমন এই নির্দেশিকায় বর্ণনা করা হয়েছে:

প্রতিটি কব্জি অঙ্গভঙ্গি KeyEvent ক্লাস থেকে একটি int ধ্রুবক ম্যাপ করা হয়, যেমনটি নিম্নলিখিত টেবিলে দেখানো হয়েছে:

অঙ্গভঙ্গি কী ইভেন্ট বর্ণনা
কব্জি আউট ফ্লিক KEYCODE_NAVIGATE_NEXT এই কী কোডটি পরবর্তী আইটেমে যায়।
কব্জি ফ্লিক করুন KEYCODE_NAVIGATE_PREVIOUS এই কী কোডটি আগের আইটেমে যায়।

কব্জির অঙ্গভঙ্গি সমর্থন করার জন্য একটি বাঁকা বিন্যাস ব্যবহার করুন

WearableRecyclerView ক্লাস তালিকার জন্য একটি বাঁকা লেআউট প্রদান করে এবং স্বয়ংক্রিয়ভাবে কব্জি অঙ্গভঙ্গি সমর্থন করে। ক্লাসে কব্জির অঙ্গভঙ্গির ঘটনার জন্য পূর্বনির্ধারিত ক্রিয়া রয়েছে যখন দৃশ্যের ফোকাস থাকে। WearableRecyclerView ক্লাস ব্যবহার করার বিষয়ে তথ্যের জন্য, Wear OS-এ তালিকা তৈরি করুন দেখুন। এছাড়াও, এই গাইডের সেরা অনুশীলন বিভাগটি দেখুন।

দ্রষ্টব্য: WearableRecyclerView ক্লাস পরিধানযোগ্য সমর্থন লাইব্রেরিতে অনুরূপ, অবচয়িত শ্রেণী প্রতিস্থাপন করে।

এমনকি যদি আপনি একটি WearableRecyclerView ব্যবহার করেন, আপনি KeyEvent ক্লাস থেকে ধ্রুবক ব্যবহার করতে চাইতে পারেন। WearableRecyclerView সাবক্লাসিং এবং onKeyDown() কলব্যাক পুনরায় প্রয়োগ করে পূর্বনির্ধারিত ক্রিয়াগুলি ওভাররাইড করা যেতে পারে। setEnableGestureNavigation(false) ব্যবহার করে আচরণটি সম্পূর্ণরূপে নিষ্ক্রিয় করা যেতে পারে। আরও তথ্যের জন্য, কীবোর্ড ক্রিয়াগুলি হ্যান্ডেল দেখুন।

মূল ঘটনা সরাসরি ব্যবহার করুন

অঙ্গভঙ্গি ইভেন্টের প্রতিক্রিয়ায় নতুন অ্যাকশন ট্রিগার করতে আপনি WearableRecyclerView এর বাইরে মূল ইভেন্টগুলি ব্যবহার করতে পারেন। গুরুত্বপূর্ণভাবে, এই অঙ্গভঙ্গি ইভেন্টগুলি যখন একটি ডিভাইস সক্রিয় মোডে থাকে তখন স্বীকৃত হয় এবং সেগুলি সমস্ত মূল ইভেন্টগুলির মতোই বিতরণ করা হয়৷

একটি শ্রেণী যা ব্যবহারকারীর ইন্টারঅ্যাকশনের সাথে সম্পর্কিত, যেমন একটি View বা একটি Activity , এবং যা KeyEvent.Callback প্রয়োগ করে৷ কলব্যাক মূল ইভেন্টগুলি শুনতে পারে যা কব্জির অঙ্গভঙ্গির সাথে সম্পর্কিত ঠিক যেমন এটি অন্য কোনো মূল ইভেন্টের সাথে তালিকাভুক্ত হতে পারে৷ অ্যান্ড্রয়েড ফ্রেমওয়ার্ক View বা Activity বলে যা মূল ইভেন্টগুলির সাথে ফোকাস করে। অঙ্গভঙ্গির জন্য, অঙ্গভঙ্গি ঘটলে onKeyDown() পদ্ধতি কলব্যাক বলা হয়।

উদাহরণ হিসেবে, একটি অ্যাপ একটি View বা Activity পূর্বনির্ধারিত ক্রিয়াগুলিকে ওভাররাইড করতে পারে যা KeyEvent.Callback প্রয়োগ করে নিম্নরূপ:

কোটলিন

class GesturesActivity : Activity() {

    /* KeyEvent.Callback */
    override fun onKeyDown(keyCode: Int, event: KeyEvent): Boolean {
        return when (keyCode) {
            KeyEvent.KEYCODE_NAVIGATE_NEXT ->
                // Do something that advances a user View to the next item in an ordered list.
                moveToNextItem()
            KeyEvent.KEYCODE_NAVIGATE_PREVIOUS ->
                // Do something that advances a user View to the previous item in an ordered list.
                moveToPreviousItem()
            else -> {
                // If you did not handle it, let it be handled by the next possible element as determined
                // by the Activity.
                super.onKeyDown(keyCode, event)
            }
        }
    }

    /** Shows the next item in the custom list.  */
    private fun moveToNextItem(): Boolean {
        ...
        // Return true if handled successfully, otherwise return false.
        return false
    }

    /** Shows the previous item in the custom list.  */
    private fun moveToPreviousItem(): Boolean {
        ...
        // Return true if handled successfully, otherwise return false.
        return false
    }
}

জাভা

public final class GesturesActivity extends Activity {

 @Override /* KeyEvent.Callback */
 public boolean onKeyDown(int keyCode, KeyEvent event) {
  switch (keyCode) {
   case KeyEvent.KEYCODE_NAVIGATE_NEXT:
    // Do something that advances a user View to the next item in an ordered list.
    return moveToNextItem();
   case KeyEvent.KEYCODE_NAVIGATE_PREVIOUS:
    // Do something that advances a user View to the previous item in an ordered list.
    return moveToPreviousItem();
  }
  // If you did not handle it, let it be handled by the next possible element as determined by the Activity.
  return super.onKeyDown(keyCode, event);
 }

 /** Shows the next item in the custom list. */
 private boolean moveToNextItem() {
  boolean handled = false;
  ...
  // Return true if handled successfully, otherwise return false.
  return handled;
 }

 /** Shows the previous item in the custom list. */
 private boolean moveToPreviousItem() {
  boolean handled = false;
  ...
  // Return true if handled successfully, otherwise return false.
  return handled;
 }
}

সর্বোত্তম অনুশীলন

  • KeyEvent এবং KeyEvent.Callback পর্যালোচনা করুন। আপনার View এবং Activity মূল ইভেন্টগুলি সরবরাহের জন্য কলব্যাক পৃষ্ঠাগুলি।
  • একটি সামঞ্জস্যপূর্ণ দিকনির্দেশক সামর্থ্য রাখুন: পরের জন্য "ফ্লিক রিস্ট আউট" এবং আগের জন্য "কব্জি ফ্লিক ইন" ব্যবহার করুন।
  • একটি অঙ্গভঙ্গি জন্য একটি স্পর্শ সমান্তরাল আছে.
  • চাক্ষুষ প্রতিক্রিয়া প্রদান.
  • কার্যকারিতা বাস্তবায়নের জন্য একটি কীকোড ব্যবহার করবেন না যা সিস্টেমের বাকি অংশের বিপরীত হবে। উদাহরণস্বরূপ, একটি ক্রিয়া বাতিল করতে বা ফ্লিক সহ বাম-ডান অক্ষে নেভিগেট করতে KEYCODE_NAVIGATE_NEXT ব্যবহার করবেন না৷
  • ব্যবহারকারী ইন্টারফেসের অংশ নয় এমন উপাদানগুলির মূল ইভেন্টগুলিকে বাধা দেবেন না, যেমন দৃশ্যগুলি অফস্ক্রিন বা আংশিকভাবে আচ্ছাদিত৷ এটি যে কোনও মূল ইভেন্টের মতোই।
  • আপনার নিজের অভিনব অঙ্গভঙ্গিতে বারবার ফ্লিক অঙ্গভঙ্গি পুনরায় ব্যাখ্যা করবেন না। এটি সিস্টেমের "কব্জি কাঁপানো" অঙ্গভঙ্গির সাথে বিরোধপূর্ণ হতে পারে।
  • অঙ্গভঙ্গি কী ইভেন্টগুলি পেতে একটি দৃশ্যের জন্য, এটিতে অবশ্যই ফোকাস থাকতে হবে; View.setFocusable() দেখুন।

    যেহেতু অঙ্গভঙ্গিগুলিকে মূল ইভেন্ট হিসাবে বিবেচনা করা হয়, তারা "টাচ মোড" থেকে একটি ট্রানজিশন ট্রিগার করে যা অপ্রত্যাশিত জিনিসগুলি করতে পারে। যেহেতু ব্যবহারকারীরা স্পর্শ এবং অঙ্গভঙ্গি ব্যবহারের মধ্যে বিকল্প হতে পারে, তাই View::setFocusableInTouchmode() পদ্ধতিটি প্রয়োজনীয় হতে পারে। কিছু ক্ষেত্রে, setDescendantFocusability(FOCUS_BEFORE_DESCENDANTS) ব্যবহার করারও প্রয়োজন হতে পারে যাতে স্পর্শ মোডে বা থেকে পরিবর্তনের পরে যখন ফোকাস পরিবর্তিত হয়, তখন আপনার অভিপ্রেত ভিউ ফোকাস পায়।

  • requestFocus() এবং clearFocus() সাবধানে ব্যবহার করুন:
    • requestFocus() কল করার সময়, নিশ্চিত করুন যে এটি দৃষ্টিভঙ্গির জন্য উপযুক্ত। যদি দৃশ্যটি অফস্ক্রিন হয় বা অন্য একটি দৃশ্য দ্বারা আচ্ছাদিত হয়, তাহলে আশ্চর্য ঘটতে পারে যখন অঙ্গভঙ্গি কলব্যাকগুলিকে ট্রিগার করে।
    • clearFocus() পদ্ধতি অন্য একটি উপযুক্ত ভিউ খুঁজে পেতে একটি ফোকাস অনুসন্ধান শুরু করে। ভিউ অনুক্রমের উপর নির্ভর করে, এই অনুসন্ধানের জন্য অ-তুচ্ছ গণনার প্রয়োজন হতে পারে। এটি এমন একটি দৃশ্যে ফোকাস বরাদ্দ করতে পারে যা আপনি ফোকাস পাওয়ার আশা করেন না।
  • মূল ইভেন্টগুলি প্রথমে ভিউ হায়ারার্কিতে ফোকাস সহ ভিউতে পৌঁছে দেওয়া হয়। যদি ফোকাসড ভিউ ইভেন্টটি পরিচালনা না করে - অন্য কথায়, এটি false ফেরত দেয় - ইভেন্টটি প্যারেন্ট ভিউতে বিতরণ করা হয় না, এমনকি যদি এটি ফোকাস পেতে পারে এবং একটি KeyListener থাকে। বরং, ইভেন্টটি বর্তমান ক্রিয়াকলাপে বিতরণ করা হয় যাতে দৃষ্টিক্রমিক ফোকাস থাকে।

    অতএব, উচ্চ স্তরে সমস্ত ইভেন্ট ধরার প্রয়োজন হতে পারে, তারপর প্রাসঙ্গিক কোডগুলি নীচে পাস করুন৷ বিকল্পভাবে, আপনি ক্রিয়াকলাপটিকে সাবক্লাস করতে পারেন এবং dispatchKeyEvent(KeyEvent event) পদ্ধতিটি ওভাররাইড করতে পারেন যখন প্রয়োজনে কীগুলিকে আটকাতে পারেন বা নীচের স্তরগুলিতে পরিচালনা করা না হলে সেগুলি পরিচালনা করতে পারেন৷