Android - onBackPressed 关闭软键盘 AND activity

Android - onBackPressed close soft keyboard AND activity

我有一个 activity 仅用于 SearchView,它专注于创建软键盘弹出。

这是代码 (kotlin):

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_search_input)

    searchInput.isIconified = false

    searchInputLayout.setOnClickListener {
        finish()
    }
}


override fun onBackPressed() {
    searchInput.clearFocus()
    finish()
}

如您所见,我尝试在按下后退按钮时关闭 activity,但它只会关闭软键盘。

我该怎么做?

提前致谢

我建议您尝试使用 InputMethodManager 隐藏键盘,然后关闭 activity。例如添加如下的 kotlin 扩展

fun View.hideKeyboard() {
    val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
    imm.hideSoftInputFromWindow(windowToken, 0)
}

然后在 activity backpress 方法中调用 hideKeyboard 方法

override fun onBackPressed() {
 searchInput.hideKeyboard()
 finish() 
}

您可以创建自定义视图并实施 onKeyPreIme(keyCode: Int, event: KeyEvent) 并检查 keyCode == KeyEvent.KEYCODE_BACK 事件。

希望this回答能给您进一步解释。

已编辑:

尝试为您的 SearchView 实现这些:

searchInput.setOnQueryTextFocusChangeListener{ _, b->
    if(!b){
     searchview.isIconified = true
     finish()
   }
}

使用这个静态方法关闭键盘

//to hide keyboard
public static void hideKeyboard(Activity activity) {
    InputMethodManager imm = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
    //Find the currently focused view, so we can grab the correct window token from it.
    View view = activity.getCurrentFocus();
    //If no view currently has focus, create a new one, just so we can grab a window token from it
    if (view == null) {
        view = new View(activity);
    }
    assert imm != null;
    imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}

此方法在JAVA

希望这会有所帮助!