سازگاری ورودی در صفحه نمایش های بزرگ

در دستگاه‌های دارای صفحه‌نمایش بزرگ، کاربران اغلب بااستفاده از صفحه‌کلید، موشواره، پد لمسی، قلم، یا دسته بازی با برنامه‌ها تعامل برقرار می‌کنند. برای فعال کردن برنامه‌تان جهت پذیرش ورودی از دستگاه‌های خارجی، کارهای زیر را انجام دهید:

  • پشتیبانی اصلی صفحه‌کلید را آزمایش کنید، مثلاً Ctrl+Z برای واگرد، Ctrl+C برای کپی، و Ctrl+S برای ذخیره. برای مشاهده فهرست میان‌برهای پیش‌فرض صفحه‌کلید، مدیریت کنش‌های صفحه‌کلید را ببینید.
  • پشتیبانی پیشرفته صفحه‌کلید را آزمایش کنید، برای مثال، پیمایش صفحه‌کلید با کلید جهش و کلیدهای جهت‌نما، تأیید ورود نوشتار با کلید ورود، و پخش و مکث با کلید فاصله در برنامه‌های رسانه.
  • تعامل‌های اصلی موشواره را آزمایش کنید، ازجمله کلیک راست برای منوِ زمینه‌ای، تغییر نماد هنگام نگه داشتن نشانگر، و رویدادهای پیمایش با چرخ موشواره یا پد لمسی در مؤلفه‌های سفارشی.
  • دستگاه‌های ورودی مختص برنامه را آزمایش کنید، مانند قلم، کنترل‌کننده‌های بازی، و کنترل‌کننده‌های MIDI برنامه موسیقی.
  • پشتیبانی از ورودی پیشرفته را درنظر بگیرید که می‌تواند برنامه را در محیط‌های رایانه برجسته کند، برای مثال، صفحه لمسی به‌عنوان کراس‌فیدر برای برنامه‌های DJ، ضبط موشواره برای بازی‌ها، و میان‌برهای صفحه‌کلید برای کاربران صفحه‌کلیدمحور.

صفحه‌کلید

نحوه پاسخ دادن برنامه‌تان به ورودی صفحه‌کلید در تجربه کاربری صفحه‌نمایش بزرگ تأثیر دارد. سه نوع ورودی صفحه‌کلید وجود دارد: پیمایش، کلیدزنی، و میان‌برها.

پیمایش با صفحه‌کلید به‌ندرت در برنامه‌های لمس‌محور پیاده‌سازی می‌شود، اما کاربران هنگام استفاده از برنامه و زمانی که دستشان روی صفحه‌کلید است، انتظار آن را دارند. پیمایش با صفحه‌کلید می‌تواند در تلفن‌ها، رایانه‌های لوحی، دستگاه‌های تاشو، و رایانه‌های رومیزی برای کاربران دارای نیازهای دسترس‌پذیری ضروری باشد.

برای بسیاری از برنامه‌ها، پیمایش با کلیدهای جهت‌نما و کلید جهش به‌طور خودکار توسط چارچوب 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 ، برنامه‌ها باید در دستگاه‌های با صفحه‌نمایش بزرگ بدون نیاز به کار توسعه اضافی، طبق انتظار رفتار کنند. برای کلیدهای فشرده‌شده‌ای که چارچوب نمی‌تواند پیش‌بینی کند، برنامه‌ها باید خودشان رفتار را مدیریت کنند. این امر به‌ویژه برای برنامه‌هایی که نماهای سفارشی دارند صادق است.

برخی‌از نمونه‌ها عبارتند از برنامه‌های گپ که از کلید Enter برای ارسال پیام استفاده می‌کنند، برنامه‌های رسانه که بازپخش را با کلید فاصله شروع و متوقف می‌کنند، و بازی‌هایی که حرکت را با کلیدهای w،‏ a،‏ s، و d کنترل می‌کنند.

اکثر برنامه‌ها فراخوانی برگشتی onKeyUp() را لغو می‌کنند و رفتار موردانتظار را برای هر کد کلید دریافتی اضافه می‌کنند:

کاتلین

kotlin 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 (مجدداً انجام دادن). برای دریافت فهرستی از میان‌برهای پیش‌فرض، مدیریت کنش‌های صفحه‌کلید را ببینید.

میان‌برها را می‌توان با پیاده‌سازی dispatchKeyShortcutEvent() برای رهگیری همه ترکیب‌های کلید (Alt، Ctrl،‏ Shift، و Meta) برای کد کلید داده‌شده فعال کرد. برای بررسی کلید توصیف‌گر خاص، از این مورد استفاده کنید:

کاتلین

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()) کلیدهای اصلاح‌گر را به‌طور پیش‌فرض می‌پذیرد بدون اینکه لازم باشد به‌طور دستی بررسی‌های کلید اصلاح‌گر را در هر مورد پیاده‌سازی کنید. مجاز کردن همه ترکیب‌های کلید اصلاح‌گر می‌تواند برای کاربرانی که به چیدمان‌های صفحه‌کلید و سیستم‌عامل‌های مختلف عادت دارند نیز راحت‌تر باشد.

بااین‌حال، می‌توانید میان‌برها را در onKeyUp() با بررسی KeyEvent.isCtrlPressed()،‏ KeyEvent.isShiftPressed()، یا KeyEvent.isAltPressed() پیاده‌سازی کنید. اگر رفتار کلید اصلاح‌شده بیشتر تغییر در رفتار برنامه باشد تا میان‌بر، حفظ آن آسان‌تر است. برای مثال، در بازی‌ها وقتی 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);
}

راهنمای میان‌برهای صفحه‌کلید را نیز ببینید.

قلم

بسیاری از دستگاه‌های دارای صفحه‌نمایش بزرگ با قلم عرضه می‌شوند. برنامه‌های Android قلم را به‌عنوان ورودی صفحه‌لمسی مدیریت می‌کنند. برخی‌از دستگاه‌ها ممکن است میز طراحی USB یا بلوتوث نیز داشته باشند، مثل Wacom Intuos. برنامه‌های Android می‌توانند ورودی بلوتوث دریافت کنند اما ورودی USB را نمی‌توانند دریافت کنند.

رویداد قلم به‌عنوان رویداد صفحه‌لمسی توسط View#onTouchEvent() یا View#onGenericMotionEvent() گزارش می‌شود و حاوی MotionEvent#getSource() از نوع SOURCE_STYLUS است.

شیء MotionEvent حاوی اطلاعاتی درباره رویداد است:

امتیازهای تاریخی

Android رویدادهای ورودی را دسته‌بندی می‌کند و آن‌ها را یک‌بار در هر فریم ارائه می‌دهد. قلم می‌تواند رویدادها را با فرکانس‌های بسیار بالاتری نسبت‌به نمایشگر گزارش کند. هنگام ایجاد برنامه‌های طراحی، بااستفاده از میاناهای برنامه‌سازی کاربردی getHistorical، رویدادهایی را که ممکن است در گذشته نزدیک رخ داده باشند بررسی کنید:

رد کردن کف دست

وقتی کاربران بااستفاده از قلم در برنامه شما طراحی می‌کنند، می‌نویسند، یا تعامل برقرار می‌کنند، گاهی کف دستشان را روی صفحه‌نمایش می‌گذارند. رویداد لمسی (تنظیم‌شده روی ACTION_DOWN یا ACTION_POINTER_DOWN) می‌تواند به برنامه‌تان گزارش شود پیش‌از اینکه سیستم لمس ناخواسته کف دست را تشخیص دهد و نادیده بگیرد.

Android رویدادهای لمس کف دست را با ارسال MotionEvent لغو می‌کند. اگر برنامه‌تان ACTION_CANCEL را دریافت کرد، اشاره را لغو کنید. اگر برنامه‌تان ACTION_POINTER_UP را دریافت می‌کند، بررسی کنید که FLAG_CANCELED تنظیم شده باشد. اگر این‌طور است، اشاره را لغو کنید.

فقط با FLAG_CANCELED بررسی نکنید. در Android 13 (سطح میانای برنامه‌سازی کاربردی ۳۳) و بالاتر، سیستم FLAG_CANCELED را برای رویدادهای ACTION_CANCEL تنظیم می‌کند، اما سیستم این پرچم را در نسخه‌های پایین‌تر Android تنظیم نمی‌کند.

‫Android نسخه ۱۲

در Android 12 (سطح API‏ ۳۲) و نسخه‌های پایین‌تر، تشخیص رد کردن کف دست فقط برای رویدادهای لمسی تک‌اشاره‌گر امکان‌پذیر است. اگر لمس کف دست تنها اشاره‌گر باشد، سیستم با تنظیم ACTION_CANCEL در شیء رویداد حرکتی، رویداد را لغو می‌کند. اگر اشاره‌گرهای دیگر پایین باشند، سیستم ACTION_POINTER_UP را تنظیم می‌کند که برای تشخیص رد کردن کف دست کافی نیست.

Android 13

در Android 13 (میانای برنامه‌سازی کاربردی سطح ۳۳) و بالاتر، اگر لمس کف دست تنها اشاره‌گر باشد، سیستم با تنظیم 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 که حاوی یک یا چند مورد با URI content:// است راه‌اندازی می‌شود. برنامه باید یادداشتی ایجاد کند که از اولین تصویر پیوست‌شده به‌عنوان تصویر پس‌زمینه استفاده کند و وارد حالتی شود که کاربر بتواند با قلم روی صفحه بکشد.

آزمایش کردن هدف‌های یادداشت‌برداری بدون قلم نوری

برای آزمایش اینکه آیا برنامه‌ای به‌درستی به هدف‌های یادداشت‌برداری بدون قلم فعال پاسخ می‌دهد یا نه، از روش زیر برای نمایش گزینه‌های یادداشت‌برداری در ChromeOS استفاده کنید:

  1. رفتن به حالت توسعه‌دهنده و قابل‌نوشتن کردن دستگاه
  2. برای باز کردن پایانه، Ctrl+Alt+F2 را فشار دهید
  3. فرمان sudo vi /etc/chrome_dev.conf را اجرا کنید
  4. برای ویرایش کردن، i را فشار دهید و --ash-enable-palette را به خط جدیدی در انتهای فایل اضافه کنید
  5. با فشار دادن Esc و سپس تایپ کردن :، w، q و فشار دادن Enter ذخیره کنید
  6. برای برگشتن به واسط کاربر معمولی ChromeOS، کلیدهای 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)
    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.
});

دو نمونه رایج از این مورد عبارت‌اند از:

  • نشان دادن اینکه آیا عنصری رفتار تعاملی دارد یا نه، مثلاً کلیک‌کردنی یا ویرایش‌کردنی بودن، با تغییر دادن نماد اشاره‌گر موشواره
  • افزودن بازخورد دیداری به موارد در فهرست یا جدول بزرگ وقتی اشاره‌گر روی آن‌ها نگه داشته می‌شود

کشیدن و رها کردن

در محیط چندپنجره‌ای، کاربران انتظار دارند بتوانند موارد را بین برنامه‌ها بکشند و رها کنند. این موضوع برای دستگاه‌های رایانه و همچنین رایانه‌های لوحی، تلفن‌ها، و دستگاه‌های تاشو در حالت صفحهٔ دونیمه صادق است.

ببینید آیا کاربران احتمالاً موارد را به داخل برنامه‌تان می‌کشند یا نه. برای مثال، ویرایشگرهای عکس باید انتظار دریافت عکس را داشته باشند، پخش‌کننده‌های صوتی باید انتظار دریافت فایل‌های صوتی را داشته باشند، و برنامه‌های طراحی باید انتظار دریافت عکس را داشته باشند.

برای افزودن پشتیبانی از کشیدن و رها کردن، به فعال کردن کشیدن و رها کردن مراجعه کنید و پست وبلاگ Android در ChromeOS — پیاده‌سازی کشیدن و رها کردن را ببینید.

ملاحظات ویژه برای ChromeOS

  • به‌خاطر داشته باشید که برای دسترسی به موارد کشیده‌شده از خارج از برنامه، با requestDragAndDropPermissions() درخواست اجازه کنید
  • برای اینکه بتوان موردی را به برنامه‌های دیگر کشید، باید پرچم View.DRAG_FLAG_GLOBAL را داشته باشد

پشتیبانی پیشرفته از اشاره‌گر

برنامه‌هایی که ورودی موشواره و صفحه لمسی را به‌صورت پیشرفته مدیریت می‌کنند باید اصلاح‌کننده View#onGenericMotionEvent() و از [MotionEvent.getSource()][] برای تمایز بین SOURCE_MOUSE و SOURCE_TOUCHSCREEN استفاده کنید.

شیء MotionEvent را برای پیاده‌سازی رفتار موردنیاز بررسی کنید:

  • حرکت ACTION_HOVER_MOVE رویداد ایجاد می‌کند.
  • دکمه‌ها رویدادهای ACTION_BUTTON_PRESS و ACTION_BUTTON_RELEASE را تولید می‌کنند. همچنین می‌توانید وضعیت فعلی همه دکمه‌های موشواره و پد لمسی را بااستفاده از getButtonState() بررسی کنید.
  • پیمایش چرخ موشواره ACTION_SCROLL رویداد ایجاد می‌کند.

کنترل‌های بازی

برخی‌از دستگاه‌های Android با صفحه‌نمایش بزرگ از حداکثر چهار کنترل‌کننده بازی پشتیبانی می‌کنند. از میاناهای برنامه‌سازی کاربردی استاندارد دسته کنترل بازی Android برای مدیریت دسته‌های کنترل بازی استفاده کنید (به پشتیبانی از دسته‌های کنترل بازی مراجعه کنید).

دکمه‌های کنترل بازی طبق نگاشت رایج به مقادیر رایج نگاشت می‌شوند. اما همه سازندگان کنترل‌کننده بازی از قراردادهای نگاشت یکسانی پیروی نمی‌کنند. اگر به کاربران اجازه دهید نگاشت‌های کنترل‌کننده محبوب مختلفی را انتخاب کنند، می‌توانید تجربه بسیار بهتری ارائه دهید. برای اطلاعات بیشتر، به پردازش فشردن دکمه دسته بازی مراجعه کنید.

حالت ترجمه ورودی

ChromeOS به‌طور پیش‌فرض حالت ترجمه ورودی را فعال می‌کند. برای اکثر برنامه‌های Android، این حالت کمک می‌کند برنامه‌ها در محیط رایانه عملکرد موردانتظار را داشته باشند. برخی‌از نمونه‌ها شامل فعال کردن خودکار پیمایش دو انگشتی در صفحه لمسی، پیمایش با چرخ موشواره، و نگاشت مختصات نمایشگر خام به مختصات پنجره است. به‌طور کلی، توسعه‌دهندگان نرم‌افزار نیازی به پیاده‌سازی هیچ‌یک از این رفتارها ندارند.

اگر برنامه‌ای رفتار ورودی سفارشی را پیاده‌سازی کند، برای مثال کنش سفارشی نیشگون گرفتن با دو انگشت روی صفحه لمسی را تعریف کند، یا این ترجمه‌های ورودی رویدادهای ورودی موردانتظار برنامه را ارائه ندهند، می‌توانید با افزودن برچسب زیر به مانیفست Android، حالت ترجمه ورودی را غیرفعال کنید:

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

منابع بیشتر