如何制作Android EditView的“完成”按钮并单击时隐藏键盘?


Answers:



148

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

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

@Michael删除了该链接。谢谢
Paresh Mayani

19
我不得不添加android:singleLine="true"得到这个通过XML工作
Jacksonkr

4
android:singleLine已弃用。使用android:maxLines =“ 1”。
FariborZ

是的@FariborZ singleLine现在已弃用。
Paresh Mayani

1
重要说明:singleLine与maxLines不同。这种误解为每个人带来很多问题,我们需要在所有地方都注意这一点。stackoverflow.com/questions/30879471/...
milosmns

86

包括两个 imeOptions singleLine

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

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

在XML文件中工作正常。但这也会导致editText继续输入您可能不想输入的一行。因此,在代码中添加以下内容将确保您最终不会在一行上键入所有内容。

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

1
谢谢,演示是在12点,时间是11:58,您在11:59修复了我的问题:p
shahzain ali

android:singleLine =“ true”已被弃用。因此,请使用android:lines =“ 1”
Gowtham。R

20

为了完成按钮

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

`


14

用这个:

android:singleLine="true"

是的...否则,如何区分转到下一行与关闭键盘?
jstewart379 2014年

这就是最终为我工作的原因。为了actionDone防止某些设备做出不同反应,我决定在其中也有一个错误。
杰克逊克

10

使用这两行 EditText

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

或者您可以通过此行以编程方式实现它。

editText.setImeOptions(EditorInfo.IME_ACTION_DONE);

7

如果小部件的属性未更改,则最好像android:imeOptions="actionDone"在布局xml文件中一样使用 。




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

1.2如果您使用Edittext

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

爪哇

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

5

我必须指出,许多人可能在不知道问题的情况下为此苦苦挣扎。

如果您希望kb在单击时隐藏Done,并且您设置android:imeOptions="actionDone"android:maxLines="1" 且未设置EditText,inputType则它不会起作用,因为许多人认为inputTypeEditText 的默认设置并不理想"text"

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


2

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

android:imeActionLabel="whatever"

在您的EditText上。

还是在java文件中使用

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

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

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


2

Kotlin解决方案

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

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

其他键盘扩展

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

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

<EditText ...
    android:imeOptions="actionDone"
    android:inputType="text"/>

需要inputType="textMultiLine"支援吗?阅读这篇文章,不要添加imeOptionsinputType使用Xml



0

如果您正在使用

android:imeOptions="actionDone" 

那么你必须使用

android:inputType="text"

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


0

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

text.setItemOptions(EditorInfo.IME_ACTION_NONE)

或在科特林:

text.imeOptions = EditorInfo.IME_ACTION_NONE
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.