EditText上的Done按钮的监听器?

Ski*_*zit 73 java android

如果我有一个EditText,我想听听用户是否按下键盘上的"完成"按钮..我该怎么做?

Asa*_*Rao 124

Dinash答案很好,但它并不适用于所有设备.下面的代码适用于所有设备

edittext.setOnEditorActionListener(new TextView.OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        if (actionId == EditorInfo.IME_ACTION_DONE) {
            Toast.makeText(HelloFormStuff.this, edittext.getText(), Toast.LENGTH_SHORT).show();
            return true;
        }
        return false;
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 另外:需要在相关的EditText上设置xml标记"android:imeOptions ="actionDone"".效果很棒 - 谢谢! (4认同)
  • 这应该是接受的答案 - 它适用于三星s4 (3认同)

Din*_*ash 90

代码是

final EditText edittext = (EditText) findViewById(R.id.edittext);
edittext.setOnKeyListener(new View.OnKeyListener() {
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        if (event.getAction() == KeyEvent.ACTION_DOWN && keyCode == KeyEvent.KEYCODE_ENTER) {
            Toast.makeText(HelloFormStuff.this, edittext.getText(), Toast.LENGTH_SHORT).show();
            return true;
        }
        return false;
    }
});
Run Code Online (Sandbox Code Playgroud)

在'edittext'中是textfield的id

查看此链接只需将setOnKeyListener设置为您的editText即可

  • 嗨丁纳什.只是发布一个链接通常没有帮助.最好提供一些示例代码来回答问题,然后链接到源文章作为参考或进一步阅读. (6认同)

Gib*_*olt 16

Kotlin 扩展解决方案

在 Kotlin 中处理 done 动作的基本方法是:

edittext.setOnEditorActionListener { _, actionId, _ ->
    if (actionId == EditorInfo.IME_ACTION_DONE) {
        // Call onDone result here
        true
    }
    false
}
Run Code Online (Sandbox Code Playgroud)

Kotlin 扩展

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

edittext.onDone { submitForm() }

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"支持,请阅读这篇文章

  • 您应该添加显式 return@setOnEditorActionListener 因为“if”不是最后一个语句 (2认同)

Ser*_*aka 6

同一琼的回答,但更换拉姆达:

etPointCombatFirst.setOnEditorActionListener((v, actionId, event) -> {
                if (actionId == EditorInfo.IME_ACTION_DONE) {
                    Toast.makeText(HelloFormStuff.this, edittext.getText(), Toast.LENGTH_SHORT).show();
                    return true;
                }
                return false;
            });
Run Code Online (Sandbox Code Playgroud)


Emm*_*her 5

根据Asad Rao的响应,我创建了此KOTLIN扩展功能。

fun TextView.onClickKeyboardDoneButton(funExecute: () -> Unit) {
    this.setOnEditorActionListener { _, actionId, _ ->
        when (actionId) {
            EditorInfo.IME_ACTION_DONE -> {
                funExecute.invoke()
                true
            }
            else -> false
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

使用:

myEditText.onClickKeyboardDoneButton{myFunctionToExecuteWhenUserClickDone()}
Run Code Online (Sandbox Code Playgroud)