在顶部有一个带有edittext的片段
当我打开该片段时,键盘应自动打开
要实现这一点,我将在片段的onStart()方法上显示键盘并将其隐藏在onStop()方法上。
问题是我第一次打开片段时KeyBoard正在显示,如果我返回并再次打开该片段,它将不显示KeyBoard
fun hideKeyboard() {
val view = this.currentFocus
if (view != null) {
val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(view.windowToken, 0)
}
}
fun showKeyBoard() {
val view = this.currentFocus
if (view != null) {
val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.toggleSoftInputFromWindow(view.windowToken, InputMethodManager.SHOW_FORCED, 0)
}
}
答案 0 :(得分:2)
我建议您通过请求键盘的视图,并使用扩展功能对其进行改编
fun AppCompatActivity.hideKeyboard(view: View?) {
view?.let {
val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(view.windowToken, 0)
}
}
fun AppCompatActivity.showKeyBoard(view: View?) {
view?.let {
val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.toggleSoftInputFromWindow(view.windowToken, InputMethodManager.SHOW_FORCED, 0)
}
}
这是一个可行的解决方案,但我真的不知道为什么当前的Focus无法正常工作。如果我找出原因,我稍后会再次编辑。
编辑1:
我遇到了真正的问题。
使用toggleSoftInputFromWindow
启动键盘时, IMM 会保存来自窗口的参考。因此,如果您requestFocus()
,则IMM会理解该窗口内的视图已被聚焦,因此当您再次使用toggleSoftInputFromWindow()
进行请求时,由于“您的视图已被聚焦”,因此IMM将不会显示键盘。即使销毁片段时调用clearFocus也会发生此问题。要解决此问题,您可以使用toggleSoftInput(InputMethodManager.SHOW_FORCED, 0)
打开键盘而没有任何窗口。
fun AppCompatActivity.showKeyBoard(view: View?) {
view?.let {
val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0)
}
}
现在的流程是:
打开您的片段->告诉您的编辑文本获得焦点->使用这种新方式打开键盘
关闭片段->以正常方式关闭键盘->开心
答案 1 :(得分:0)
您必须在onStart()中请求聚焦于edittext。 我将发布Java代码,它对我有用。
editText.requestFocus();