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

时间:2009-12-17 05:56:36

标签: android keyboard

当用户点击EditView时,Android会打开键盘,以便用户可以在EditView中书写。

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

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

17 个答案:

答案 0 :(得分:135)

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

<EditText 
    android:id="@+id/edittext_done"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:hint="Enter some text"
    android:imeOptions="actionDone"
    />

答案 1 :(得分:122)

使用TextView.setImeOptions并将其传递给actionDone。 比如textView.setImeOptions(EditorInfo.IME_ACTION_DONE);

答案 2 :(得分:79)

包括 imeOptions singleLine

<EditText 
   android:id="@+id/edittext_done"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:imeOptions="actionDone"
   android:singleLine="true"
   />

答案 3 :(得分:32)

android:imeActionLabel="Done" 
android:singleLine="true"

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

mainText.setHorizontallyScrolling(false);
mainText.setMaxLines("Maximum integer value that you want to provide");

答案 4 :(得分:14)

使用此:

android:singleLine="true"

答案 5 :(得分:9)

将这两行用于EditText

android:imeActionLabel="Done"
android:singleLine="true"

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

editText.setImeOptions(EditorInfo.IME_ACTION_DONE);

答案 6 :(得分:8)

获取完成按钮

editText.setImeOptions(EditorInfo.IME_ACTION_DONE);

xml中的

android:inputType="text"

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

    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;
        }
    });

`

答案 7 :(得分:6)

如果小部件的属性没有改变,最好使用like 布局android:imeOptions="actionDone"文件中的xml

答案 8 :(得分:5)

使用:

android:imeActionLabel="Done"
android:singleLine="true" 

答案 9 :(得分:5)

当单击键盘中的下一个按钮时,将使用ActionDone 键盘是hide.Use in Edit Text或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"/>

1.2如果使用Edittext

    <EditText
    android:id="@+id/edittext"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:imeOptions="actionDone"/>

<强> JAVA

EditText edittext= (EditText) findViewById(R.id.edittext);
edittext.setImeOptions(EditorInfo.IME_ACTION_DONE);

答案 10 :(得分:5)

我必须指出这一点,因为很多人在不知道问题的情况下可以挣扎。

如果您希望点击lookup.csv时隐藏kb,并设置Done&amp; android:imeOptions="actionDone" 没有设置您的EditText android:maxLines="1"它将 NOT 工作,因为EditText的默认inputType不是inputType正如很多人所想的那样。

因此,仅设置"text"会为您提供所需的结果 您将其设置为inputType"text",...等等

答案 11 :(得分:4)

代码:

editText.setImeOptions(EditorInfo.IME_ACTION_DONE);

答案 12 :(得分:3)

科特林溶液

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

UPDATE sessions SET expired = now() WHERE id = 1 AND ott = TRUE;

Kotlin扩展

使用它在您的主代码中调用SELECT * FROM users WHERE id = 1 AND ott = TRUE; 。使其更具可读性和可维护性

// 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
}

其他键盘扩展

如果您想要更多简化键盘操作(显示,关闭,聚焦)的方法:Read this post

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

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 } } 支持吗? Read this post,不要在Xml中添加<EditText ... android:imeOptions="actionDone" android:inputType="text"/> inputType="textMultiLine"

答案 13 :(得分:1)

实际上,您可以将自定义文本设置为该蓝色小按钮。在xml文件中只需使用

android:imeActionLabel="whatever"

在你的EditText上。

或者在java文件中使用

etEditText.setImeActionLabel("whatever", EditorInfo.IME_ACTION_DONE);

我随意选择 IME_ACTION_DONE 作为此功能的第二个参数应该包含的示例。可以找到这些操作的完整列表here

应该注意,这不会导致文本出现在所有设备上的所有键盘上。某些键盘不支持该按钮上的文本(例如swiftkey)。有些设备也不支持它。一个好的规则是,如果您在按钮上看到文本,则会将其更改为您想要的任何内容。

答案 14 :(得分:0)

在您的视图中使用它

<EditText 
    ....
    ....
    android:imeOptions="actionDone" 
    android:id="@+id/edtName"
    />

答案 15 :(得分:0)

如果您使用

android:imeOptions="actionDone" 

然后您必须使用

android:inputType="text"

然后只有您可以在“键盘”中看到“操作完成”按钮。

答案 16 :(得分:0)

如果您根本不想要任何按钮(例如,您正在为盲人开发GUI,而盲人的位置无法轻按,而您只能依靠单次/双击/长按):

text.setItemOptions(EditorInfo.IME_ACTION_NONE)

或者在科特林:

text.imeOptions = EditorInfo.IME_ACTION_NONE