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

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

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

কীবোর্ড

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

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

অনেক অ্যাপ্লিকেশানের জন্য, সাধারণ তীর কী এবং ট্যাব নেভিগেশন সবই প্রয়োজন এবং বেশিরভাগই Android ফ্রেমওয়ার্ক দ্বারা স্বয়ংক্রিয়ভাবে পরিচালনা করা হয়। উদাহরণস্বরূপ, একটি 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);

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

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

কীস্ট্রোক

একটি অন-স্ক্রিন ভার্চুয়াল কীবোর্ড ( 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-ভিত্তিক শর্টকাটগুলি প্রত্যাশিত। যদি একটি অ্যাপ তাদের বাস্তবায়ন না করে, অভিজ্ঞতাটি ব্যবহারকারীদের কাছে হতাশাজনক বোধ করতে পারে। উন্নত ব্যবহারকারীরা প্রায়শই ব্যবহৃত অ্যাপ-নির্দিষ্ট কাজের জন্য শর্টকাটগুলির প্রশংসা করে। শর্টকাট একটি অ্যাপ ব্যবহার করা সহজ করে এবং শর্টকাট নেই এমন অ্যাপ থেকে এটিকে আলাদা করে।

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

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

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

কোটলিন

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);
}

আপনি উপরের মত একই পদ্ধতিতে 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 । Android অ্যাপ্লিকেশানগুলি ব্লুটুথ ইনপুট গ্রহণ করতে পারে, কিন্তু USB ইনপুটের সাথে কাজ করবে না৷

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

MotionEvent এ অতিরিক্ত ডেটাও থাকবে:

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

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

  • MotionEvent.getHistoricalX()
  • MotionEvent.getHistoricalY()
  • MotionEvent.getHistoricalPressure()
  • MotionEvent.getHistoricalAxisValue()

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

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

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

শুধু FLAG_CANCELED এর জন্য চেক করবেন না। Android 13 অনুযায়ী, সুবিধার জন্য, সিস্টেমটি ACTION_CANCEL ইভেন্টগুলির জন্য FLAG_CANCELED সেট করে, কিন্তু পূর্ববর্তী সংস্করণগুলি তা করে না৷

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

অ্যান্ড্রয়েড 12 (এপিআই লেভেল 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-এর একটি বিশেষ অভিপ্রায় রয়েছে যা ব্যবহারকারীদের কাছে নিবন্ধিত নোট গ্রহণকারী অ্যাপগুলিকে সারফেস করে৷ একটি নোট গ্রহণকারী অ্যাপ হিসাবে একটি অ্যাপ নিবন্ধন করতে, Android ম্যানিফেস্টে নিম্নলিখিত যোগ করুন:

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

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

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

কোনো অ্যাপ্লিকেশান সক্রিয় স্টাইলাস ছাড়াই নোট নেওয়ার অভিপ্রায়ে সঠিকভাবে সাড়া দেয় কিনা তা পরীক্ষা করতে, 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 নিবন্ধন করা উচিত। একটি প্রসঙ্গ মেনু নির্মাণের বিস্তারিত জানার জন্য, প্রসঙ্গ মেনু তৈরি করা দেখুন।

কোটলিন

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)
  false // listener did not consume the event.
}

জাভা

yourView.setOnHoverListener((view, event) -> {
    addVisualHighlighting(true);
    view.setPointerIcon(PointerIcon
            .getSystemIcon(view.getContext(), PointerIcon.TYPE_HAND));
    return true;
});

টানা এবং পতন

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

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

ড্র্যাগ অ্যান্ড ড্রপ সমর্থন যোগ করতে, অ্যান্ড্রয়েড ড্র্যাগ অ্যান্ড ড্রপ ডকুমেন্টেশন অনুসরণ করুন এবং এই ChromeOS ব্লগ পোস্টটি একবার দেখুন।

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

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

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

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

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

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

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

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

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

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

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

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

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

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

{% শব্দার্থে %} {% endverbatim %} {% শব্দার্থে %} {% endverbatim %}