如何清除焦点并删除Android上的键盘?

时间:2010-11-20 21:20:49

标签: android

我有一个EditText控件。 如果我点击它,软键盘会弹出,但是当我按下“输入/确定/返回”然后按下EditText控件时它仍然具有焦点和键盘。 如何关闭软键盘并从中移除焦点?

6 个答案:

答案 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)
    }
}