安卓-onBackPressed关闭软键盘AND活动



我有一个只针对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()
}

正如你所看到的,当按下后退按钮时,我试图关闭活动,但它只关闭软键盘。

我该怎么做??

提前感谢

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

希望这个答案能进一步向你解释。

编辑:

尝试为您的SearchView:实现这些

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

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

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

然后在您的活动背压方法中,您调用hideKeyboard方法

override fun onBackPressed() {
searchInput.hideKeyboard()
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

希望这会有所帮助!

最新更新