I have an Edittext with imeoptions
asactiongo
. and I triggered my event when pressing soft keyboard enter button.
mModelId.setOnE
I've checked at Android 2.1 and Android 4.0 versions and your code is working fine. IME_ACTION_GO
event is reported in case EditText has singleLine
option specified to true
. In case it is specified to false
actionId
has IME_NULL
value independently of the setImeActionLabel
was called or no.
In the TextView.onKeyDown method i've found that IME_NULL
actionId is used when KEYCODE_ENTER
is detected
mEditor.mInputContentType.onEditorActionListener.onEditorAction(
this, EditorInfo.IME_NULL, event))
Perhaps it is custom keyboard issue. Do you use any? If so try these changes:
instead of
mModelId.setImeActionLabel("Search Model", KeyEvent.KEYCODE_ENTER);
should be
mModelId.setImeActionLabel("Search Model", EditorInfo.IME_ACTION_GO);
try this
declare edittext and OnEditorActionListener() like this
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;
}
});
and you use imeoptions as actionGo then revome it, i think it override ImeActionLabel once try this and reply
setImeActionLabel
take two parameters and the second int parameter should be one of the those that are in the EditorInfo
class. Such as:
EditorInfo.IME_ACTION_GO
EditorInfo.IME_ACTION_DONE
EditorInfo.IME_ACTION_NEXT
....
You cannot send there any other integer like KeyEvent.KEYCODE_ENTER
And you have to set bothimeOptions
parameter and singleLine
parameter in XML in order it to work. Example:
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:imeOptions="actionGo"
android:singleLine="true"/>
Here is the code that I used and it is working:
XML Layout:
<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>
And the basic Activity
code:
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);
Supply a value for EditorInfo.actionId used when an input method is connected to the text view.
numberEditor.mInputContentType.onEditorActionListener.onEditorAction( this, EditorInfo.IME_NULL, event))
Supply a value for EditorInfo.actionLabel used when an input method is connected to the text view.
Must be a string value, using '\;' to escape characters such as '\n' or '\uxxxx' for a unicode character.