キーボードハンドリングタイトル画像

【コピペで使える Kotlin】キーボードハンドリング



キーボードハンドリングを行う

アンドロイドアプリ制作をしていると、戻るボタンを押した時のハンドリングがしたくなる時があります。
この記事では、コピペで利用できるコードをActuvity用、Fragment用でそれぞれ書きます。
Fragment側ではハンドリングが実装されていないので、Fragmentの拡張メソッドを作りました。 引数の


Activity用

override fun onKeyUp(keyCode: Int, event: KeyEvent?): Boolean {
    // code whatever you like here...
    return super.onKeyUp(keyCode, event)
}

override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
    // code whatever you like here...
    return super.onKeyDown(keyCode, event)
}

Fragment用

fun Fragment.onKeyUp(v: View, action: () -> Unit) {
    v.setOnKeyListener { _, code, keyEvent ->
        if (code == KeyEvent.KEYCODE_BACK && keyEvent.action == KeyEvent.ACTION_UP) {
            action()
            return@setOnKeyListener true
        }
        return@setOnKeyListener false
    }

    v.isFocusableInTouchMode = true
    v.requestFocus()
}

fun Fragment.onKeyDown(v: View, action: () -> Unit) {
    v.setOnKeyListener { _, code, keyEvent ->
        if (code == KeyEvent.KEYCODE_BACK && keyEvent.action == KeyEvent.ACTION_DOWN) {
            action()
            return@setOnKeyListener true
        }
        return@setOnKeyListener false
    }

    v.isFocusableInTouchMode = true
    v.requestFocus()
}

利用する時は onViewCreated() の中に書きます。
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)

    onKeyUp(view) {
        // code whatever you like here...
    }

    onKeyDown(view) {
        // code whatever you like here...
    }
}

参考リンク

Android FragmentでBack key(戻るボタン)のeventをハンドリンクする

0 コメント