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

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

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

কীবোর্ড

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

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

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

কোটলিন

yourView.isFocusable = true

জাভা

yourView.setFocusable(true);

বিকল্পভাবে আপনি আপনার লেআউট ফাইলে focusable বৈশিষ্ট্য সেট করতে পারেন:

android:focusable="true"

আরও জানতে, ফোকাস হ্যান্ডলিং দেখুন।

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

কোটলিন

// Arrow keys
yourView.nextFocusLeftId = R.id.view_to_left
yourView.nextFocusRightId = R.id.view_to_right
yourView.nextFocusTopId = R.id.view_above
yourView.nextFocusBottomId = R.id.view_below
// Tab key
yourView.nextFocusForwardId = R.id.next_view

জাভা

// Arrow keys
yourView.setNextFocusLeftId(R.id.view_to_left);
yourView.setNextFocusRightId(R.id.view_to_left);
yourView.setNextFocusTopId(R.id.view_to_left);
yourView.setNextFocusBottomId(R.id.view_to_left);
// Tab key
yourView.setNextFocusForwardId(R.id.next_view);

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

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

কীস্ট্রোক

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

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

বেশিরভাগ অ্যাপ 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)
    }
}

জাভা

@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_ENTER) {
        sendMessage();
        return true;
    } else if (KeyEvent.KEYCODE_SPACE){
        playOrPauseMedia();
        return true;
    } else {
        return super.onKeyUp(keyCode, event);
    }
}

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

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

শর্টকাট

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

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

একটি প্রদত্ত কীকোডের জন্য সমস্ত কী সমন্বয় ( Alt , Ctrl , Shift , এবং Meta ) আটকাতে dispatchKeyShortcutEvent() প্রয়োগ করে শর্টকাট সক্রিয় করা যেতে পারে। একটি নির্দিষ্ট পরিবর্তনকারী কী পরীক্ষা করতে, ব্যবহার করুন:

কোটলিন

override fun dispatchKeyShortcutEvent(event: KeyEvent): Boolean {
  return when (event.keyCode) {
    KeyEvent.KEYCODE_O -> {
      openFile() // Ctrl+O, Shift+O, Alt+O
      true
    }
    KeyEvent.KEYCODE_Z-> {
      if (event.isCtrlPressed) {
        if (event.isShiftPressed) {
          redoLastAction() // Ctrl+Shift+Z pressed
          true
        } else {
          undoLastAction() // Ctrl+Z pressed
          true
        }
      }
    }
    else -> {
      return super.dispatchKeyShortcutEvent(event)
    }
  }
}

জাভা

@Override
public boolean dispatchKeyShortcutEvent(KeyEvent event) {
  if (event.getKeyCode() == KeyEvent.KEYCODE_O) {
      openFile(); // Ctrl+O, Shift+O, Alt+O
      return true;
  } else if(event.getKeyCode() == KeyEvent.KEYCODE_Z) {
      if (event.isCtrlPressed()) {
          if (event.isShiftPressed()) {
              redoLastAction();
              return true;
          }
          else {
              undoLastAction();
              return true;
          }
      }
  }
  return super.dispatchKeyShortcutEvent(event);
}

অন্যান্য কীস্ট্রোক হ্যান্ডলিং থেকে শর্টকাট কোড আলাদা করা (যেমন onKeyUp() এবং onKeyDown() ) প্রতিটি ক্ষেত্রে ম্যানুয়ালি মডিফায়ার কী চেক প্রয়োগ না করেই ডিফল্টরূপে মডিফায়ার কীগুলি গ্রহণ করে। বিভিন্ন কীবোর্ড লেআউট এবং অপারেটিং সিস্টেমে অভ্যস্ত ব্যবহারকারীদের জন্য সমস্ত মডিফায়ার কী সমন্বয়ের অনুমতি দেওয়া আরও সুবিধাজনক হতে পারে।

যাইহোক, আপনি KeyEvent.isCtrlPressed() , KeyEvent.isShiftPressed() , বা KeyEvent.isAltPressed() চেক করে onKeyUp() এ শর্টকাট প্রয়োগ করতে পারেন। এটি বজায় রাখা সহজ হতে পারে যদি সংশোধিত কী আচরণটি শর্টকাটের চেয়ে অ্যাপের আচরণে পরিবর্তনের বেশি হয়। উদাহরণস্বরূপ, গেমগুলিতে যখন W মানে "অগ্রগতি হাঁটা" এবং Shift+W মানে "এগিয়ে দৌড়"।

কোটলিন

override fun onKeyUp(keyCode: Int, event: KeyEvent): Boolean {
  return when(keyCode) {
    KeyEvent.KEYCODE_W-> {
      if (event.isShiftPressed) {
        if (event.isCtrlPressed) {
          flyForward() // Ctrl+Shift+W pressed
          true
        } else {
          runForward() // Shift+W pressed
          true
        }
      } else {
        walkForward() // W pressed
        true
      }
    }
    else -> super.onKeyUp(keyCode, event)
  }
}

জাভা

@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_W) {
        if (event.isShiftPressed()) {
            if (event.isCtrlPressed()) {
                flyForward(); // Ctrl+Shift+W pressed
                return true;
            } else {
                runForward(); // Shift+W pressed
                return true;
            }
        } else {
            walkForward();
            return true;
        }
    }
    return super.onKeyUp(keyCode, event);
}

এছাড়াও কীবোর্ড শর্টকাট হেল্পার দেখুন।

লেখনী

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

একটি স্টাইলাস ইভেন্ট View#onTouchEvent() বা View#onGenericMotionEvent() দ্বারা একটি টাচস্ক্রিন ইভেন্ট হিসাবে রিপোর্ট করা হয় এবং এতে SOURCE_STYLUS ধরনের একটি MotionEvent#getSource() রয়েছে।

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 :

কোটলিন

yourView.setOnContextClickListener {
    showContextMenu()
    true
}

জাভা

yourView.setOnContextClickListener(v -> {
    showContextMenu();
    return true;
});

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

হোভার

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

কোটলিন

// Change the icon to a "hand" pointer on hover.
// Highlight the view by changing the background.
yourView.setOnHoverListener { view, _ ->
    addVisualHighlighting(true)
    view.pointerIcon =
        PointerIcon.getSystemIcon(view.context, PointerIcon.TYPE_HAND)
    true // Listener consumes the event.
}

জাভা

// Change the icon to a "hand" pointer on hover.
// Highlight the view by changing the background.
yourView.setOnHoverListener((view, event) -> {
    addVisualHighlighting(true);
    view.setPointerIcon(
        PointerIcon.getSystemIcon(view.getContext(), PointerIcon.TYPE_HAND)
    );
    return true; // Listener consumes the event.
});

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

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

টেনে আনুন

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

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

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

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

  • অ্যাপের বাইরে থেকে টেনে আনা আইটেমগুলি অ্যাক্সেস করতে requestDragAndDropPermissions() দিয়ে অনুমতির অনুরোধ করতে ভুলবেন না
  • অন্য অ্যাপ্লিকেশানগুলিতে টেনে আনার জন্য একটি আইটেমের View.DRAG_FLAG_GLOBAL পতাকা থাকতে হবে

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

মাউস এবং টাচপ্যাড ইনপুট উন্নত হ্যান্ডলিং যে অ্যাপ্লিকেশন একটি বাস্তবায়ন করা উচিতSOURCE_MOUSE এবং SOURCE_TOUCHSCREEN মধ্যে পার্থক্য করতে View#onGenericMotionEvent() এবং [ MotionEvent.getSource() ][] ব্যবহার করুন।

প্রয়োজনীয় আচরণ বাস্তবায়ন করতে MotionEvent অবজেক্ট পরীক্ষা করুন:

  • আন্দোলন ACTION_HOVER_MOVE ইভেন্ট তৈরি করে।
  • বোতামগুলি ACTION_BUTTON_PRESS এবং ACTION_BUTTON_RELEASE ইভেন্টগুলি তৈরি করে৷ আপনি getButtonState() ব্যবহার করে সমস্ত মাউস এবং ট্র্যাকপ্যাড বোতামের বর্তমান অবস্থাও পরীক্ষা করতে পারেন।
  • মাউস হুইল স্ক্রোলিং ACTION_SCROLL ইভেন্ট তৈরি করে।

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

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

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

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

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

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

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

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