繁体   English   中英

关闭键盘时取消对 EditText 的关注

[英]Unfocus EditText when keyboard is dismissed

我想通过点击完成或返回按钮来完成一个简单的任务,在关闭键盘时使EditText失去焦点(而不是隐藏光标)。 到目前为止我能找到的只有

window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN)

但是只有当活动第一次打开时才好。 键盘关闭后,文本字段处于尴尬的聚焦状态。

您可以在键盘关闭时监听事件,然后使用editText.clearFocus(); 当那个事件发生时。

请参阅此答案以收听键盘关闭事件

我不敢相信这是我能找到的最简单的解决方案(真的,Android?):

public class CustomEditText extends EditText {

    public CustomEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
        this.setOnEditorActionListener(new OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                if (actionId == KeyEvent.KEYCODE_ENDCALL) {
                    InputMethodManager imm = (InputMethodManager)v.getContext()
                        .getSystemService(Context.INPUT_METHOD_SERVICE);
                    imm.hideSoftInputFromWindow(CustomEditText.this.getWindowToken(), 0);
                    CustomEditText.this.clearFocus();
                    return true;
                }
                return false;
            }
        });
    }

    @Override
    public boolean onKeyPreIme(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) {
            this.clearFocus();
        }
        return super.onKeyPreIme(keyCode, event);
    }

}

您可以清除编辑文本的焦点,还可以管理启用/禁用编辑文本。

科特林版本:

class CustomEditText: AppCompatEditText {
    constructor(context: Context) : super(context)
    constructor(context: Context, attrs: AttributeSet) : super(context, attrs)
    constructor(context: Context, attrs: AttributeSet, defStyle: Int) : super(context, attrs, defStyle)

    override fun onKeyPreIme(keyCode: Int, event: KeyEvent?): Boolean {
        if(keyCode == KeyEvent.KEYCODE_BACK) {
            clearFocus()
        }
        return super.onKeyPreIme(keyCode, event)
    }
}

用法:

<com.youappdomain.view.CustomEditText
      android:layout_width="match_parent"
      android:layout_height="wrap_content" />

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM