Get back key event on EditText

前端 未结 4 1102
再見小時候
再見小時候 2020-12-02 17:39

How can I handle the event of pressing back key while typing on an EditText? When the virtual keyboard is shown and the user presses back, it gets hidden. I want to handle t

4条回答
  •  予麋鹿
    予麋鹿 (楼主)
    2020-12-02 18:14

    Non of the other answers were working for me in SearchView, I've finally end up with overriding dispatchKeyEventPreIme(...) method in my custom view:

    class ImeAwareSearchView @JvmOverloads constructor(
        context: Context?,
        attrs: AttributeSet? = null,
        defStyleAttr: Int = 0
    ) : SearchView(context, attrs, defStyleAttr) {
    
        var onKeyEventPreImeListener: OnKeyEventPreImeListener? = null
    
        override fun dispatchKeyEventPreIme(event: KeyEvent?): Boolean {
            onKeyEventPreImeListener?.onPreImeKeyEvent()
            return false
        }
    }
    

    The listener looks like this:

    interface OnKeyEventPreImeListener {
    
        fun onPreImeKeyEvent()
    }
    

    And I'm setting it in Fragment to hide my search row:

    search_input.onKeyEventPreImeListener = object: OnKeyEventPreImeListener {
        override fun onPreImeKeyEvent() {
            hideSearchRow()
        }
    }
    

    Note that dispatchKeyEventPreIme(...) method is called twice, so make sure you don't do your staff on event twice as well.

提交回复
热议问题