Android 的 EditText 问题:KeyListener
Posted
技术标签:
【中文标题】Android 的 EditText 问题:KeyListener【英文标题】:Problem with Android's EditText : KeyListener 【发布时间】:2011-09-24 18:27:07 【问题描述】:在EditText
组件上,我尝试设置KeyListener
以捕获ENTER 键(用于表单验证)。
text.setKeyListener(new KeyListener()
@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 boolean onKeyDown(View view, Editable text, int keyCode, KeyEvent event)
if (keyCode == KeyEvent.KEYCODE_ENTER)
onKeyEnterPressedListener.onKeyEnterPressed(AKText.this);
return true;
else
return false;
@Override
public int getInputType()
return 1;
@Override
public void clearMetaKeyState(View view, Editable content, int states)
);
问题是,每当我使用键盘输入EditText
时,所有的键都会被忽略,它也忽略了我的击键。但是,模拟器设备上的软板正在工作。
请问如何解决?
【问题讨论】:
【参考方案1】:我会改用TextWatcher 类:
private TextWatcher tw = new TextWatcher()
public void afterTextChanged(Editable s)
public void beforeTextChanged(CharSequence s, int start, int count, int after)
// you can check for enter key here
public void onTextChanged (CharSequence s, int start, int before,int count)
;
EditText et = (EditText) findViewById(R.id.YOUR_EDITTEXT_ID);
et.addTextChangedListener(tw);
【讨论】:
很好的答案... onKey 侦听器并不总是有效...这有效!谢谢! 是TextWatcher
是在EditText 再次重新加载时调用
addTextChangedListener ** 浪费了几分钟找到它,呵呵.. caps C【参考方案2】:
您的意思是使用 setOnKeyListener() 吗?
http://developer.android.com/reference/android/view/View.html#setOnKeyListener(android.view.View.OnKeyListener)
http://developer.android.com/reference/android/view/View.OnKeyListener.html
editText.setOnKeyListener(new OnKeyListener()
public boolean onKey(View v, int keyCode, KeyEvent event)
Log.i("KEY", Integer.toString(keyCode));
return false;
);
【讨论】:
【参考方案3】:这是因为您从 onKeyUp 方法返回 false,在 android 中具体操作是在 onKeyUp 方法之后处理的。
除了使用 KeyListener 之外,大多数活动都有一个可以覆盖的 onKeyUp 方法。
这是我一直在处理的一些代码示例。
@Override
public boolean onKeyUp(int keyCode, KeyEvent event)
if(keyCode == KeyEvent.KEYCODE_TAB) editText1.tab();
if(event.isCtrlPressed())
if(keyCode == KeyEvent.KEYCODE_O) // ctrl+o
onClick(open);
else if(keyCode == KeyEvent.KEYCODE_N) // ctrl+n
addFileTab(null); // add untitled tab
editText1.setText("");
else if(keyCode == KeyEvent.KEYCODE_A) // ctrl+a
editText1.selectAll();
else if(keyCode == KeyEvent.KEYCODE_S) // ctrl+s
onClick(save);
else if(keyCode == KeyEvent.KEYCODE_C) // ctrl+c
String selected = editText1.selection();
ClipData clip;
if(current != null)
clip = ClipData.newPlainText(current.getName() + " selection", selected);
else
clip = ClipData.newPlainText("Cerulean selection", selected);
clipMan.setPrimaryClip(clip);
else if(keyCode == KeyEvent.KEYCODE_P && clipMan.hasPrimaryClip()) // ctrl+p
if(clipMan.getPrimaryClipDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN))
CharSequence clip = clipMan.getPrimaryClip().getItemAt(0).coerceToText(getBaseContext());
editText1.insert(clip.toString());
return false;
if(keyCode == KeyEvent.KEYCODE_SPACE || keyCode == KeyEvent.KEYCODE_ENTER)
onTabClicked(current, curTab);
return super.onKeyUp(keyCode, event);
我将超类称为 onKeyUp 用于其他所有内容。希望它可以帮助某人。
-c
更新:仅处理硬件键盘,其他操作使用 TextWatcher。
【讨论】:
以上是关于Android 的 EditText 问题:KeyListener的主要内容,如果未能解决你的问题,请参考以下文章
Android 的 EditText 问题:KeyListener