我目前正在努力将导航和点击按钮关闭键盘结合起来。现在我有一个按钮,它使用R.id.action.actionname导航到一个新的片段。这是当前在onclick侦听器中设置的。如果用户导航到新片段,键盘将保持打开状态,这不应该发生。
我尝试使用下面的代码,但没有成功
val inputManager =
activity!!.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
val currentFocusedView = this.activity!!.currentFocus
binding.idLoginButton.setOnClickListener() {
if (currentFocusedView != null) {
inputManager.hideSoftInputFromWindow(
currentFocusedView.windowToken,
InputMethodManager.HIDE_NOT_ALWAYS
)
}
Navigation.createNavigateOnClickListener(R.id.action_homeFragment_to_loginFragment)
}
我也试过放
Navigation.createNavigateOnClickListener(R.id.action_homeFragment_to_loginFragment)
的括号之间
binding.idLoginButton.setOnClickListener()
这也不起作用。
将此代码放入您的活动类:-
override fun dispatchTouchEvent(ev: MotionEvent?): Boolean {
if (currentFocus != null) {
val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(currentFocus!!.windowToken, 0)
}
return super.dispatchTouchEvent(ev)
}
希望它能解决你的问题。
如果没有聚焦视图(例如,如果您只是更改了片段,则可能会发生这种情况(,则会有其他视图提供有用的窗口标记。
如果(view==null(view=new view(activity(,这些是上述代码的替代方案;这些并没有明确提到你的活动。
片段类内部:
view=getView((.getRootView((.getWindowToken((;给定一个片段片段作为参数:
view=片段.getView((.getRootView((.getWindowToken((;从您的内容主体开始:
view=findViewById(android.R.id.content(.getRootView((.getWindowToken((;
并在方法的末尾添加这一行:
view.clearFocus((;
更多信息:https://stackoverflow.com/a/17789187/9351811