我正在制作一个应用程序,在这个应用程序中我有编辑文本。我想当用户在编辑文本结束时写一些文本然后按回车键,我想要它调用一些命令。这就是我所做的。这在ICS中有效,但是当我尝试其他设备(Jelly Bean)时,它不起作用。
inputViaTextChatbot.setOnEditorActionListener(new OnEditorActionListener() {
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if ((event != null && (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) || (actionId == EditorInfo.IME_ACTION_DONE)) {
// hide the keyboard
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
// process
getThis = inputViaTextChatbot.getText().toString();
if (getThis!=null && getThis.length()>1) {
try {
Log.v("Got This: ", getThis);
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
inputViaTextChatbot.setText("");
}
}
return false;
}
});
任何人都可以帮我这样做吗?
答案 0 :(得分:2)
这是一个已知的错误,导致在多个设备上无法识别Enter
密钥。避免它并使其工作的解决方法如下:
像这样创建一个TextView.OnEditorActionListener
:
TextView.OnEditorActionListener enterKey = new TextView.OnEditorActionListener() {
public boolean onEditorAction(TextView view, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_GO) {
// Do whatever you need
}
return true;
}
};
假设您的View
是EditText
,您需要以这种方式设置:
final EditText editor = (EditText) findViewById(R.id.Texto);
editor.setOnEditorActionListener(enterKey);
最后一步是将以下属性分配给EditText
:
android:imeOptions="actionGo"
这基本上会更改enter键的默认行为,将其设置为actionGo
IME选项。在您的处理程序中,只需为您创建的侦听器指定它,这样就可以获得enter key
行为。