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