处理输入类型为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_NUMBER
或InputType.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
}
}
});