Android - 在 EditText 中处理“Enter”

Posted

技术标签:

【中文标题】Android - 在 EditText 中处理“Enter”【英文标题】:Android - Handle "Enter" in an EditText 【发布时间】:2010-12-02 04:04:13 【问题描述】:

我想知道是否有办法处理用户在输入EditText 时按下Enter,类似于onSubmit html 事件。

还想知道是否有一种方法可以操纵虚拟键盘,使“完成”按钮被标记为其他内容(例如“开始”)并在单击时执行特定操作(再次,例如 onSubmit)。

【问题讨论】:

Kotlin & Extensions:看看这里:***.com/a/48810268/1912924 【参考方案1】:

我通过扩展新的MaterialAlertDialogBuilder为此创建了一个帮助类

用法

new InputPopupBuilder(context)
        .setInput(R.string.send, 
                R.string.enter_your_message, 
                text -> sendFeedback(text, activity))
        .setTitle(R.string.contact_us)
        .show();

代码

public class InputPopupBuilder extends MaterialAlertDialogBuilder 

    private final Context context;
    private final AppCompatEditText input;

    public InputPopupBuilder(Context context) 
        super(context);
        this.context = context;
        input = new AppCompatEditText(context);
        input.setInputType(InputType.TYPE_CLASS_TEXT);
        setView(input);
    

    public InputPopupBuilder setInput(int actionLabel, int hint, Callback callback) 
        input.setHint(hint);
        input.setImeActionLabel(context.getString(actionLabel), KeyEvent.KEYCODE_ENTER);
        input.setOnEditorActionListener((TextView.OnEditorActionListener) (v, actionId, event) -> 
            if (actionId == EditorInfo.IME_NULL
                    && event.getAction() == KeyEvent.ACTION_DOWN) 
                Editable text = input.getText();
                if (text != null) 
                    callback.onClick(text.toString());
                    return true;
                
            
            return false;
        );

        setPositiveButton(actionLabel, (dialog, which) -> 
            Editable text = input.getText();
            if (text != null) 
                callback.onClick(text.toString());
            
        );

        return this;
    

    public InputPopupBuilder setText(String text)
        input.setText(text);
        return this;
    

    public InputPopupBuilder setInputType(int inputType)
        input.setInputType(inputType);
        return this;
    

    public interface Callback 
        void onClick(String text);
    

需要

implementation 'com.google.android.material:material:1.3.0-alpha04'

【讨论】:

【参考方案2】:

好的,如果没有一个答案对你有用并且还没有生气,我有一个解决方案。 在这段代码中使用 AppCompatMultiAutoCompleteTextView(是的!)而不是 EditText(kotlin)

val filter = InputFilter  source, start, end, _, _, _ ->
        var keepOriginal = true
        val sb = StringBuilder(end - start)
        for (i in start until end) 
            val c = source[i]
            if (c != '\n')
                sb.append(c)
            else 
                keepOriginal = false
                //TODO:WRITE YOUR CODE HERE
            
        
        if (keepOriginal) null else 
            if (source is Spanned) 
                val sp = SpannableString(sb)
                TextUtils.copySpansFrom(source, start, sb.length, null, sp, 0)
                sp
             else 
                sb
            
        
    

appCompatMultiAutoCompleteTextView.filters = arrayOf(filter);

它(可能)适用于所有设备,我在 android 4.4 和 10 中对其进行了测试。它也适用于小米。 我该死的♥机器人:)

【讨论】:

以上是关于Android - 在 EditText 中处理“Enter”的主要内容,如果未能解决你的问题,请参考以下文章

Android:为EditText打开键盘时处理后退按钮单击

Android EditText单击触发onclick事件处理

Android限制EditText只能输入中文或者指定内容的实现

Android EditText中字符大小与光标位置

Android中EditText的掩码

如何在Kotlin中处理EditText drawableRight图标的点击监听器?