我有一个只针对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
中
希望这会有所帮助!