Apply these recommended practices to create comfortable, intuitive, and
responsive gamepad controls across menus and active gameplay.

## Design for player ergonomics

Well-crafted input patterns feel natural and accessible, helping your game reach
a wider audience and letting everyone enjoy playing comfortably.

### Offer flexible input options for taps and holds

Although fast, repeated presses or continuous holding can be an engaging part of
core gameplay, players have diverse physical preferences and accessibility
needs. Offer customizable control settings to reduce physical strain. For
example, convert rapid-tap or press-and-hold interactions into a single press,
provide a toggle mode where one press starts an action and a second stops it, or
let players simplify or bypass intensive input sequences altogether.

| Press-and-hold and toggle options | Quick-tap option |
|---|---|
| ![Controller settings menu with Button Tap Challenges set to Press and Hold, alongside Toggle Sprint and Toggle Aim switches.](https://developer.android.com/static/images/games/game-controller/Design-for-game-controllers/button-tap-press-hold.png) | ![Controller settings menu with Button Tap Challenges set to Quick Taps for rapid repeated button presses.](https://developer.android.com/static/images/games/game-controller/Design-for-game-controllers/button-tap-quick-taps.png) |

### Use two-step selection or shortcuts instead of drag-and-drop

Moving items across the screen is much faster and more precise on a gamepad when
you replace hold-and-drag gestures with discrete steps. Let players pick up an
item with the confirm button, navigate to the target slot using the directional
pad (D-pad) or stick, and press it again to place or swap the selection. For
frequent actions with a fixed destination, such as equipping gear, storing loot,
or playing a card, you can streamline the flow even further by assigning direct
shortcut keys to the focused element.

| Not recommended | Recommended |
|---|---|
| ![Not recommended: Holding the A button while continuously dragging a card across the board with the analog stick.](https://developer.android.com/static/images/games/game-controller/Design-for-game-controllers/replace-drag-drop-antipattern.jpg) | ![Recommended: Selecting a card with A, stepping across slots with the D-pad or stick, or pressing X to quick-play the card immediately.](https://developer.android.com/static/images/games/game-controller/Design-for-game-controllers/replace-drag-drop-best-practice.jpg) |

### Provide in-game button remapping

Button remapping lets players adjust key actions to fit their controller form
factor, grip style, and muscle memory from other platforms. Starting in Android
17 (API level 37), users can remap buttons, sticks, and triggers directly in the
system settings. To extend this flexibility to more players across all Android
versions, we recommend also providing in-game remapping and keeping on-screen
guide icons updated to match the reassigned inputs. For implementation details,
see [Process controller inputs](https://developer.android.com/games/sdk/game-controller/controller-input.md.txt#process-inputs) (Kotlin or Java) and [Use custom controller
device mappings](https://developer.android.com/games/sdk/game-controller/custom-mapping) (C++ Game Controller library).

## Map buttons using a hierarchical structure

Organize navigation into tiered levels across both menus and active gameplay so
players can access complex interfaces and large skill sets without excessive
button presses.

### Use tab switching

Assign the shoulder bumpers to top-level menus, and navigate submenus using the
D-pad or analog sticks. This two-level approach makes navigation much faster by
eliminating the need to step through every single UI element with directional
inputs.
![Inventory menu where top category tabs display bumper prompts for tab switching while a potion slot inside the item grid displays directional focus arrows.](https://developer.android.com/static/images/games/game-controller/Design-for-game-controllers/hierarchical-tab-switching.jpg) **Figure 1.** Using the shoulder bumpers to switch top-level menu tabs while navigating sub-items with the D-pad.

### Group UI elements

In complex interfaces or grid-based gameplay such as puzzle boards and strategy
maps, group multiple small elements into larger sections. Let players jump
between major regions first, and then use the D-pad or analog sticks to make
precise selections within the focused group.
![Two-step puzzle board navigation: jumping between 3-by-3 tile groups first, and then selecting an individual leaf tile inside the active group with the D-pad or stick.](https://developer.android.com/static/images/games/game-controller/Design-for-game-controllers/hierarchical-group-ui.jpg) **Figure 2.** Grouping UI elements into major regions for faster hierarchical navigation.

### Expand in-game action sets

Organize in-game actions into a two-level hierarchy based on the gameplay
context. For real-time actions, map primary moves to the face buttons and use a
shoulder bumper to switch them to a secondary skill set. For tactical situations
where play pauses or slows down, consider offering a radial menu, such as a
skill wheel, where players tilt the stick to choose from more options.
![Side-by-side dungeon combat screens: holding the right bumper switches the four face button slots from basic movement actions to elemental combat skills.](https://developer.android.com/static/images/games/game-controller/Design-for-game-controllers/hierarchical-action-sets.jpg) **Figure 3.** Switching in-game action sets on the face buttons using a shoulder bumper. ![Side-by-side tactical battle screens: holding the left bumper opens an eight-slot radial skill wheel where tilting the right stick selects a skill.](https://developer.android.com/static/images/games/game-controller/Design-for-game-controllers/hierarchical-radial-menu.jpg) **Figure 4.** Opening a radial menu with a shoulder button to choose from more options in tactical situations.

## Provide clear visual feedback

Display clear on-screen prompts and focus indicators so players always know
which controller inputs are available and which UI element is active.

### Display button action guides

Clearly display corresponding gamepad button icons next to interactive UI
elements so players instantly know which button to press. In addition, recognize
the controller type to display matching iconography and labels for its specific
layout. For implementation details, see [Common controller types](https://developer.android.com/games/sdk/game-controller/controller-input.md.txt#common-controller-types) (Kotlin or
Java) and [Controller device information](https://developer.android.com/games/sdk/game-controller/controller.md.txt#device-information) (C++ Game Controller library).

| Scenario | Guideline | Example |
|---|---|---|
| **Complex menu interactions** | Provide a dedicated button prompt bar at the bottom of the screen, showing which face buttons equip or sort items and which shoulder bumpers switch tabs, that dynamically updates based on the selected item. | ![Weapon equipment menu with bumper prompts on the top Weapons, Armor, Potions, and Materials tabs and a bottom prompt bar showing X to Equip, Y to Sort, A to Inspect, and B for Back.](https://developer.android.com/static/images/games/game-controller/Design-for-game-controllers/prompts-complex-menu.jpg) |
| **Combat skill heads-up display (HUD)** | Attach small gamepad badges directly onto HUD skill slots or skill bars so players can trigger abilities through instant reflexes. | ![Action role-playing combat screen displaying button and bumper badges directly on the bottom skill and potion slots.](https://developer.android.com/static/images/games/game-controller/Design-for-game-controllers/prompts-combat-hud.jpg) |

### Highlight active focus states

Use distinct visual cues, such as a highlighted background color, borders, or
scaling effects, to clearly indicate which UI element or button currently has
controller focus.

| Scenario | Guideline | Example |
|---|---|---|
| **Account login entry** | Clearly highlight the currently selected input field, sign-in option, or action button so players know which field they are editing or submitting before opening the on-screen keyboard. | ![Account login dialog highlighting the focused Email or Username field with a glowing border and an A to Edit button prompt.](https://developer.android.com/static/images/games/game-controller/Design-for-game-controllers/focus-account-login.jpg) |
| **Inventory and grid menus** | Display a bright border or frame around the currently selected slot to clearly indicate the current selection. | ![Inventory grid showing a bright glowing border around the currently focused item slot.](https://developer.android.com/static/images/games/game-controller/Design-for-game-controllers/focus-inventory-grid.jpg) |
| **HUD** | When players navigate to on-screen HUD elements, highlight the active HUD element distinctly so it stands out. | ![On-screen Inventory Bag icon highlighted with a glowing focus ring, directional arrows, and an A to Open prompt when the player selects it.](https://developer.android.com/static/images/games/game-controller/Design-for-game-controllers/focus-hud-element.jpg) |
| **Active gameplay** | During combat or exploration, indicate the currently selected skill, active weapon slot, or locked-on enemy target so players can make quick decisions without losing track of their selection. | ![Active combat scene showing a clear target lock-on indicator on the enemy and a highlighted active skill slot.](https://developer.android.com/static/images/games/game-controller/Design-for-game-controllers/focus-active-gameplay.jpg) |

## Recommended practices for using a virtual mouse

Operating a virtual mouse requires fine cursor control and precision
adjustments. In structured menus, settings lists, and grid-based inventories,
discrete D-pad or stick navigation is faster and more reliable. However, an
optional virtual mouse cursor is useful in non-grid scenarios where directional
stepping feels restrictive:

| Scenario | Guideline | Example |
|---|---|---|
| **World maps** | Select locations that are scattered irregularly across a map, or place a custom pin on an empty spot where no button exists. | ![World map screen using a virtual mouse cursor to select irregularly scattered map locations and place custom pins.](https://developer.android.com/static/images/games/game-controller/Design-for-game-controllers/virtual-mouse-world-map.jpg) |
| **Non-linear skill trees** | Navigate web-like or radial progression trees where nodes branch out at irregular diagonal angles. | ![Radial, non-linear skill tree navigated with a virtual mouse cursor.](https://developer.android.com/static/images/games/game-controller/Design-for-game-controllers/virtual-mouse-skill-tree.jpg) |
| **Inspection and free-form placement** | Investigate hidden objects in adventure games without spoiling clues through automatic focus highlights, or freely position units on a non-grid battlefield. | ![Adventure and strategy scenes using a virtual mouse cursor for point-and-click clue inspection and free-form unit placement.](https://developer.android.com/static/images/games/game-controller/Design-for-game-controllers/virtual-mouse-inspection.jpg) |

When implementing a virtual mouse, follow these guidelines. If you develop in
Unity, see [Control a virtual mouse with a game controller in Unity](https://developer.android.com/games/engines/unity/unity-virtual-mouse.md.txt) for
engine setup details.

### Enlarge button touch targets

If buttons or interactive areas are too small, positioning a virtual mouse over
them becomes difficult. Scale UI elements adequately for comfortable targeting.

| Not recommended | Recommended |
|---|---|
| ![Not recommended: Tiny interactive map icons that are difficult to target with a virtual mouse cursor.](https://developer.android.com/static/images/games/game-controller/Design-for-game-controllers/enlarge-targets-antipattern.jpg) | ![Recommended: Enlarged interactive map markers with generous hit targets for comfortable virtual mouse selection.](https://developer.android.com/static/images/games/game-controller/Design-for-game-controllers/enlarge-targets-best-practice.jpg) |

### Maintain appropriate spacing between buttons

When interactive elements are positioned far apart, moving a virtual mouse
across the screen slows down navigation. Group related controls close together
by clustering sequential selection and confirmation buttons in the same area, or
by opening action menus for equipping, upgrading, or discarding items directly
next to the selected slot rather than in a fixed screen corner.

| Not recommended | Recommended |
|---|---|
| ![Not recommended: Skills menu where the Equipped Slots panel is separated by a wide empty gap from the selected Knockback Shot skill in the skills list.](https://developer.android.com/static/images/games/game-controller/Design-for-game-controllers/spacing-buttons-antipattern.png) | ![Recommended: Skills menu where the Equipped Slots panel is positioned directly next to the selected Knockback Shot skill to minimize cursor movement.](https://developer.android.com/static/images/games/game-controller/Design-for-game-controllers/spacing-buttons-best-practice.png) |

### Provide smart targeting assistance

To make targeting easier, assist the virtual mouse cursor when it approaches
interactive elements based on the screen context:

| Scenario | Guideline | Example |
|---|---|---|
| **Wider selection radius** | When panning across a map with multiple markers, keep cursor movement free and fluid. Define a wider, invisible selection radius around quest markers, fast-travel points, or dungeon entrances so they automatically highlight and become selectable when the cursor gets close. | ![Interactive world map showing a wide dashed selection radius around a dungeon marker that highlights and becomes selectable when the cursor passes near its edge.](https://developer.android.com/static/images/games/game-controller/Design-for-game-controllers/targeting-wider-radius.jpg) |
| **Cursor slowdown on hover** | Slightly slow down cursor speed when passing over interactive skill nodes so players don't overshoot small targets and can stop on the target node comfortably. | ![Radial skill tree showing the virtual mouse cursor slowing down as it enters the hover zone over a skill node.](https://developer.android.com/static/images/games/game-controller/Design-for-game-controllers/targeting-hover-slowdown.jpg) |
| **Placement snapping** | When placing structures, units, or items onto valid grid spaces or sockets, such as building towers in a strategy game, snap the placement preview into position when the cursor gets close so players don't have to align it pixel by pixel. | ![Strategy game battlefield showing a tower placement preview snapping into a valid foundation socket when the cursor gets close.](https://developer.android.com/static/images/games/game-controller/Design-for-game-controllers/targeting-placement-snapping.jpg) |