处理输入类型为TEXT的EditText键更改事件 [英] Handle EditText key change event with input type TEXT

查看:103
本文介绍了处理输入类型为TEXT的EditText键更改事件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的用例是在文本框中输入4行之后限制用户.设置maxLines不能停止用户.

My Use case is to restrict user after he has entered 4 lines in text box. Setting maxLines will not work to stop user.

令我惊讶的是,当输入类型为InputType.TYPE_CLASS_TEXT时,Android没有提供按键按下/按下事件.我正在接受其他所有类型的活动.下面是我的代码.

I am surprise that Android is not providing key down/up event when input type is InputType.TYPE_CLASS_TEXT. I am receiving event for all other types. Below is my code.

        EditText et = new EditText(this);
        et.setMaxLines(3);
        et.setSingleLine(false);
        et.setInputType(InputType.TYPE_CLASS_TEXT);
        et.setHint("First edit text");
        et.setKeyListener(this); // This key listener is also not working.
        et.setOnKeyListener(new View.OnKeyListener() { 
            @Override
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                Log.d("MainActivity.class", "event received"); // This event is never called.
                return false;
            }
        });

@Override
public int getInputType() {
    return InputType.TYPE_CLASS_NUMBER;
}


@Override
public boolean onKeyDown(View view, Editable text, int keyCode, KeyEvent event) { // THIS EVENT HITS ONLY WHEN INPUT TYPE IS OTHER THAN TEXT.
    return false;
}

@Override
public boolean onKeyUp(View view, Editable text, int keyCode, KeyEvent event) {
    return false;
}

@Override
public boolean onKeyOther(View view, Editable text, KeyEvent event) {
    return false;
}

@Override
public void clearMetaKeyState(View view, Editable content, int states) {

}

即使是onKeyDown()的活动也无法正常工作.

even onKeyDown() of activity is also not working.

当我设置InputType.TYPE_CLASS_NUMBERInputType.TYPE_CLASS_PHONE时,它工作正常.

When I am setting InputType.TYPE_CLASS_NUMBER or InputType.TYPE_CLASS_PHONE, it is working fine.

P.S.我想获取输入类型文本的快捷键.

P.S. I want to get key down ewvent for Input Type Text.

推荐答案

不完全是您的要求,但这是另一种实现方法.

Not exactly what you asked but this is another way to accomplish it.

您可以将textChangedListener添加到您的EditText.

You can add a textChangedListener to your EditText.

editText.addTextChangedListener(new TextWatcher() {
            String text;
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                if(editText.getLineCount()==2)
                {
                    text=s.toString();
                }
            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void afterTextChanged(Editable s) {
                if(editText.getLineCount()>2)
                {
                    editText.setText(text);
                    editText.setSelection(text.length()); //move cursor to the end of the string
                }

            }
        });

这篇关于处理输入类型为TEXT的EditText键更改事件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆