Compose Multiplatform で キーボードショートカットを実装する
概要
Compose Multiplatform で、キーボードショートカット処理を実装する方法を解説します。
仕様
- キーボードの左右カーソルキー(←、→)押下時に、ログを出力させます。
実装
- onKeyEvent で キーイベントをハンドリングします。
- onKeyEvent は Viewがフォーカスされていないと反応しないので、画面起動時にフォーカスを当てます。
commonMain/../ui/screens/MainScreen.kt
val focusRequester = remember { FocusRequester() }
LaunchedEffect(Unit) {
focusRequester.requestFocus()
}
Box(modifier = Modifier
.onKeyEvent {
if (it.type == KeyEventType.KeyUp) return@onKeyEvent true
when (it.key) {
Key.DirectionLeft -> {
println("Left")
}
Key.DirectionRight -> {
println("Right")
}
}
true
}
.focusRequester(focusRequester)
.focusable()
) {
...
}
このままだと、Mac (Designed for iPad) アプリでキー入力した時に音がなってしまうので、音を消すために SwiftUIの onKeyPress を追加します。 onKeyPressは iOS 17.0 以降で使用できます。
iosApp/iosApp/iOSApp.swift
@main
struct iOSApp: App {
var body: some Scene {
WindowGroup {
RootView()
.onKeyPress(.leftArrow) {
// キー押下時に音を消すため
return .handled
}
.onKeyPress(.rightArrow) {
return .handled
}
}
}
}