Hardware-key mouse and touch cursor for Android 8+.
KeyCursor turns hardware keys into a real touch cursor: movement, click-and-hold, drag and continuous scrolling. The cursor is hidden until you hold the configured Mouse key.
- 8-direction movement and fully configurable bindings
- real touch DOWN / MOVE / UP for hold and drag
- continuous Scroll mode with Android continued gesture strokes
- short Mouse-key press switches Normal / Scroll while the cursor is visible
- optional edge wrapping
- configurable cursor style, color and size
- separate portrait / landscape direction inversion
- optional landscape control rotation with the display
- system light / dark theme
- optional broadcast control for Key Mapper, Tasker, Automate or ADB
- no network permission, analytics or ads
Package: ru.vasys.keycursor
Minimum Android: 8.0 / API 26
Tested on Fujitsu F-03L (Android 8.1).
- Install KeyCursor.
- Open Accessibility settings from the app and enable KeyCursor input service.
- Bind Mouse key and any directions your device does not report as the standard D-pad.
- Hold Mouse key to show or hide the cursor.
When the cursor is hidden, keys pass through normally. While it is visible, movement/click/cursor-switch keys are consumed so Android focus does not move at the same time. Mouse key itself stays pass-through.
Hardware bindings are matched as physical keys first. Android-rotated D-pad key codes are normalized so the default mapping stays stable after rotation.
In settings you can additionally:
- Rotate controls with screen in landscape — physical Up rotates into the screen direction after the device is turned;
- invert left/right separately in portrait and landscape;
- invert up/down separately in portrait and landscape.
Inversion is applied after landscape rotation.
External broadcasts are disabled until Allow external control is enabled in KeyCursor.
Show / hide:
adb shell am broadcast \
-a ru.vasys.keycursor.action.MOUSE_TOGGLE \
-n ru.vasys.keycursor/.input.ExternalTriggerReceiverOther actions include MODE_TOGGLE, CURSOR_NEXT, LEFT_DOWN, LEFT_UP and MOVE_*.
Requires JDK 17 and Android SDK 35.
./gradlew :app:assembleDebugAndroid allows only one enabled Accessibility service to own hardware key filtering at a time. If another accessibility remapper owns that stream, use KeyCursor's external broadcast backend instead.
Cursor artwork derived from Pictogrammers Material Design Icons is listed in THIRD_PARTY_NOTICES.md.
KeyCursor itself is MIT licensed. See PRIVACY.md for data handling.