我有一个EditText控件。 如果我点击它,软键盘会弹出,但是当我按下“输入/确定/返回”然后按下EditText控件时它仍然具有焦点和键盘。 如何关闭软键盘并从中移除焦点?
答案 0 :(得分:13)
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(editTextField.getWindowToken(), 0);
答案 1 :(得分:11)
在布局XML文件中,在EditText上指定imeOption:
android:imeOptions="actionGo"
接下来,在Activity的java文件
中为EditText添加一个动作侦听器 mYourEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_GO) {
// hide virtual keyboard
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(mYourEditText.getWindowToken(), 0);
return true;
}
return false;
}
});
其中mYourEditText是EditText对象
答案 2 :(得分:2)
private void hideDefaultKeyboard() {
activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
//you have got lot of methods here
}
答案 3 :(得分:1)
您可以尝试在布局中的其他元素上执行SetFocus()
。
如果您正在谈论键盘上的“输入/确定/返回”按钮,您可能需要在KeyListener
控件上设置EditText
才能知道何时{{1}另一个元素。
答案 4 :(得分:1)
确保您的EditText XML具有:
android:id="@+id/myEditText"
android:imeOptions="actionDone"
然后将侦听器设置为EditText(使用Kotlin和片段):
myEditText.setOnEditorActionListener({ v, actionId, event ->
if (actionId == EditorInfo.IME_ACTION_DONE) {
myEditText.clearFocus()
val imm = activity.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(view!!.windowToken, 0)
}
false
})
答案 5 :(得分:0)
适用于我的Kotlin解决方案,消除了所有活动焦点并关闭了软键盘。 在您的父级布局上设置android:focusableInTouchMode =“ true”。 就我而言,我也有一个ScrollView。我在其触摸事件监听器中设置view.clearFocus()。这将清除所有触摸文本视图上的所有焦点。然后我继续关闭屏幕上的软键盘。
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools"
...
android:focusableInTouchMode="true" //<--- this is important
tools:context=".SomFragment">
<ScrollView
android:id="@+id/scroll_view_container"
...
>
<TextView
android:id="@+id/sone_text_1"
...
/>
<TextView
android:id="@+id/sone_text_2"
...
/>
然后在您的班上
scroll_view_container.setOnTouchListener { v, event ->
view.clearFocus()
hideSoftKeyboard()
true
}
private fun hideSoftKeyboard() {
val windowToken = view?.rootView?.windowToken
windowToken?.let{
val imm = requireContext().getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(it, 0)
}
}