我有imeoptions
为actiongo
的Edittext。当按下软键盘输入按钮时,我触发了我的事件。
mModelId.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
boolean handled = false;
// if (event.getKeyCode() == KeyEvent.KEYCODE_ENTER) {
if (actionId == EditorInfo.IME_ACTION_GO) {
id = mModelId.getText().toString();
System.out.println("Model id in Edittext:-"+ id);
Toast.makeText(getActivity(), "You entered "+id, Toast.LENGTH_LONG).show();
System.out.println("Before Call Volley");
callVolley();
handled = true;
}
return handled;
}
});
一切正常但是当我添加actionlabel来输入密钥时,事件没有触发。 mModelId.setImeActionLabel("Search Model", KeyEvent.KEYCODE_ENTER);
。可能是什么问题?
答案 0 :(得分:9)
试试这个
像这样声明edittext和OnEditorActionListener()
mModelId = (EditText) findViewById(R.id.edittext_id);
mModelId.setImeActionLabel("Search Model", KeyEvent.KEYCODE_ENTER);
mModelId.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
boolean handled = false;
if (actionId == KeyEvent.KEYCODE_ENTER) {
id = mModelId.getText().toString();
Toast.makeText(getActivity(), "You entered "+id, Toast.LENGTH_LONG).show();
callVolley();
handled = true;
}
return handled;
}
});
然后你使用imeoptions作为actionGo然后重新启用它,我认为它会覆盖ImeActionLabel 一旦试试并回复
答案 1 :(得分:2)
setImeActionLabel
取两个参数,第二个int参数应该是EditorInfo
类中的一个参数。如:
EditorInfo.IME_ACTION_GO
EditorInfo.IME_ACTION_DONE
EditorInfo.IME_ACTION_NEXT
....
你不能发送任何其他整数,如KeyEvent.KEYCODE_ENTER
您必须在XML中设置imeOptions
参数和singleLine
参数才能生效。例如:
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:imeOptions="actionGo"
android:singleLine="true"/>
以下是我使用的代码,它正在运行:
XML布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<EditText
android:id="@+id/editText2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"/>
</LinearLayout>
基本Activity
代码:
mEditText2.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
boolean handled = false;
if (actionId == EditorInfo.IME_ACTION_GO) {
Toast.makeText(MainActivity.this, "You entered " + v.getText().toString(), Toast.LENGTH_LONG).show();
handled = true;
}
return handled;
}
});
mEditText2.setImeActionLabel("Search Model", EditorInfo.IME_ACTION_GO);
答案 2 :(得分:2)
我已经检查过Android 2.1和Android 4.0版本,您的代码运行正常。如果EditText为IME_ACTION_GO
指定了singleLine
选项,则会报告true
事件。如果指定false
actionId
,则IME_NULL
的{{1}}值与被调用的setImeActionLabel
无关。
在TextView.onKeyDown方法中,我发现在检测到IME_NULL
时会使用KEYCODE_ENTER
actionId
mEditor.mInputContentType.onEditorActionListener.onEditorAction(
this, EditorInfo.IME_NULL, event))
也许是自定义键盘问题。你用的是什么?如果是这样,请尝试这些更改:
而不是
mModelId.setImeActionLabel("Search Model", KeyEvent.KEYCODE_ENTER);
应该是
mModelId.setImeActionLabel("Search Model", EditorInfo.IME_ACTION_GO);
答案 3 :(得分:2)
为输入法连接到文本视图时使用的EditorInfo.actionId提供一个值。
numberEditor.mInputContentType.onEditorActionListener.onEditorAction( 这,EditorInfo.IME_NULL,事件))
为输入法连接到文本视图时使用的EditorInfo.actionLabel提供一个值。
必须是字符串值,使用'\;'转义unicode字符的'\ n'或'\ uxxxx'等字符。