如何点击Android EditView"完成"按钮并隐藏键盘?

d-m*_*man 107 keyboard android

当用户点击时EditView,Android会打开键盘,以便用户可以写入EditView.

问题是,当用户完成写入时,无法隐藏键盘.用户必须按后退按钮才能隐藏键盘.

有没有办法Done在键盘上显示隐藏键盘的按钮?

Par*_*ani 137

首先,您需要为目标EditText 设置android:imeOptions等于的属性,actionDone如下所示.这会将EditText软键盘中的"RETURN"按钮更改为"DONE"按钮.

<EditText 
    android:id="@+id/edittext_done"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:hint="Enter some text"
    android:imeOptions="actionDone"
    />
Run Code Online (Sandbox Code Playgroud)

  • 我不得不添加`android:singleLine ="true"`以通过xml使其工作 (17认同)
  • android:singleLine已弃用.使用android:maxLines ="1". (4认同)

dma*_*oni 130

使用TextView.setImeOptions并将其传递给actionDone.喜欢textView.setImeOptions(EditorInfo.IME_ACTION_DONE);

  • 我不得不添加`textView.singleLine(true)`以使其以编程方式工作. (12认同)
  • `textView.setImeOptions(EditorInfo.IME_ACTION_DONE);` (8认同)

Ode*_*ner 82

包括两个 imeOptions singleLine:

<EditText 
   android:id="@+id/edittext_done"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:imeOptions="actionDone"
   android:singleLine="true"
   />
Run Code Online (Sandbox Code Playgroud)


小智 34

android:imeActionLabel="Done" 
android:singleLine="true"
Run Code Online (Sandbox Code Playgroud)

在XML文件中工作得很好.但这也会导致editText你输入一行你可能不想要的东西.因此,在代码中添加以下内容将确保您不会在一行中输入所有内容.

mainText.setHorizontallyScrolling(false);
mainText.setMaxLines("Maximum integer value that you want to provide");
Run Code Online (Sandbox Code Playgroud)


Sha*_*van 15

为了完成按钮

editText.setImeOptions(EditorInfo.IME_ACTION_DONE);

android:inputType="text" 在xml中

用于处理完成后从键盘点击

    editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event){
            if(actionId == EditorInfo.IME_ACTION_DONE){
                // Your action on done
                return true;
            }
            return false;
        }
    });
Run Code Online (Sandbox Code Playgroud)

`


Fra*_*yen 14

用这个:

android:singleLine="true"
Run Code Online (Sandbox Code Playgroud)


Nar*_*had 10

使用这两行代表你的 EditText

android:imeActionLabel="Done"
android:singleLine="true"
Run Code Online (Sandbox Code Playgroud)

或者你可以通过这一行以编程方式实现它.

editText.setImeOptions(EditorInfo.IME_ACTION_DONE);
Run Code Online (Sandbox Code Playgroud)


小智 7

如果小部件的属性没有改变,那么android:imeOptions="actionDone"在布局xml文件中使用就好 了.


小智 6

使用:

android:imeActionLabel="Done"
android:singleLine="true" 
Run Code Online (Sandbox Code Playgroud)


Ste*_*yen 5

对于代码:

editText.setImeOptions(EditorInfo.IME_ACTION_DONE);
Run Code Online (Sandbox Code Playgroud)


Raj*_*Raj 5

单击键盘中的时间键盘时隐藏键盘时使用ActionDone.使用编辑文本或AppcompatEdit

XML

1.1如果使用AppCompatEdittext

    <android.support.v7.widget.AppCompatEditText
    android:id="@+id/edittext"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:imeOptions="actionDone"/>
Run Code Online (Sandbox Code Playgroud)

1.2如果使用Edittext

    <EditText
    android:id="@+id/edittext"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:imeOptions="actionDone"/>
Run Code Online (Sandbox Code Playgroud)

JAVA

EditText edittext= (EditText) findViewById(R.id.edittext);
edittext.setImeOptions(EditorInfo.IME_ACTION_DONE);
Run Code Online (Sandbox Code Playgroud)


Muh*_*aat 5

我必须指出,许多人在不知不觉中就可以为此奋斗。

如果你想KB隐藏,当点击Done,并设置android:imeOptions="actionDone"android:maxLines="1" 设置你的EditText inputType它将工作作为默认inputType的EditText上是不是"text"作为一个很多人认为。

所以,只有设置inputType会给你你想要的结果,不管你是什么将它设置为喜欢"text""number"...等。


Gib*_*olt 5

科特林解决方案

在 Kotlin 中处理隐藏键盘 + 完成操作的直接方法是:

// Set action
edittext.setOnEditorActionListener { _, actionId, _ ->
    if (actionId == EditorInfo.IME_ACTION_DONE) {
        // Hide Keyboard
        val inputMethodManager = context.getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
        inputMethodManager.hideSoftInputFromWindow(windowToken, 0)
        true
    }
    false
}
Run Code Online (Sandbox Code Playgroud)

Kotlin 扩展

使用它来调用edittext.onDone {/*action*/}您的主代码。使其更具可读性和可维护性

edittext.onDone { edittext.hideKeyboard() }

fun View.hideKeyboard() {
    val inputMethodManager = context.getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
    inputMethodManager.hideSoftInputFromWindow(windowToken, 0)
}

fun EditText.onDone(callback: () -> Unit) {
    // These lines optional if you don't want to set in Xml
    imeOptions = EditorInfo.IME_ACTION_DONE
    maxLines = 1
    setOnEditorActionListener { _, actionId, _ ->
        if (actionId == EditorInfo.IME_ACTION_DONE) {
            callback.invoke()
            true
        }
        false
    }
}
Run Code Online (Sandbox Code Playgroud)

额外的键盘扩展

如果您想要更多简化键盘操作的方法(显示、关闭、聚焦):阅读这篇文章

如果不在代码中,请不要忘记将这些选项添加到您的 edittext Xml

<EditText ...
    android:imeOptions="actionDone"
    android:inputType="text"/>
Run Code Online (Sandbox Code Playgroud)

需要inputType="textMultiLine"支持吗?阅读这篇文章,不要在 Xml 中添加imeOptionsinputType