[英]Android setOnEditorActionListener() doesn't fire
I'm trying to set a listener to EditText
when enter button will be pressed.But it didn't fire at all.当按下输入按钮时,我试图将侦听器设置为
EditText
。但它根本没有触发。 I tested this on LG Nexus 4 with Android 4.2.2.我在使用 Android 4.2.2 的 LG Nexus 4 上对此进行了测试。
setOnEditorActionListener
works on Amazon Kindle Fire with Android 2.3 and setImeActionLabel
works nowhere! setOnEditorActionListener
适用于 Android 2.3 的 Amazon Kindle Fire,而setImeActionLabel
无处可去! I also can't set text for Enter
button.Here is code:我也无法为
Enter
按钮设置文本。这是代码:
mEditText.setImeActionLabel("Reply", EditorInfo.IME_ACTION_UNSPECIFIED);
mEditText.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId,
KeyEvent event) {
Log.d("TEST RESPONSE", "Action ID = " + actionId + "KeyEvent = " + event);
return true;
}
});
What am I doing wrong?我究竟做错了什么? How can I fix this?
我怎样才能解决这个问题?
You can use TextWatcher .您可以使用TextWatcher 。
editText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void afterTextChanged(Editable s) {
if (s.charAt(s.length() - 1) == '\n') {
Log.d("TAG", "Enter was pressed");
}
}
});
Make sure that you have an IME_ACTION set in the layout file:确保您在布局文件中设置了 IME_ACTION:
<EditText
android:id="@+id/search"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="@string/search_hint"
android:inputType="text"
android:imeOptions="actionSend" />
For a full explanation, seehttp://developer.android.com/guide/topics/ui/controls/text.html .有关完整说明,请参阅http://developer.android.com/guide/topics/ui/controls/text.html 。
What worked for me is this,I have added this below line to EditText对我有用的是这个,我在下面添加了这行到 EditText
android:imeOptions="actionSend"
this line makes keyboard which pops up when clicked on edit text has send button instead of search此行使单击编辑文本时弹出的键盘具有发送按钮而不是搜索
in the setOnEditorActionListener you override following method looking for action send在 setOnEditorActionListener 中,您覆盖以下方法寻找动作发送
@Override
public boolean onEditorAction(TextView textView, int actionId, KeyEvent keyEvent) {
if (actionId == EditorInfo.IME_ACTION_SEND) {
//implement stuff here
}
}
在 xml 文件中添加标签android:inputType="text"
到 EditText
I use the following code我使用以下代码
<EditText
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_toRightOf="@id/ic_magnify"
android:layout_centerVertical="true"
android:textSize="15sp"
android:textColor="#000"
android:id="@+id/input_search"
android:inputType="text"
android:background="@null"
android:hint="Enter Address, City or Zip Code"
android:imeOptions="actionSearch"/>
mSearchText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent keyEvent) {
if(actionId == EditorInfo.IME_ACTION_SEARCH || actionId == EditorInfo.IME_ACTION_DONE
|| keyEvent.getAction() == KeyEvent.ACTION_DOWN || keyEvent.getAction() == KeyEvent.KEYCODE_ENTER){
geoLocate();
}
return false;
}
});
You can try this to use the OnKeyListener您可以尝试使用OnKeyListener
editText.setOnKeyListener(new OnKeyListener() {
@Override
public boolean onKey(View v, int actionId, KeyEvent event) {
Log.d("TEST RESPONSE", "Action ID = " + actionId + "KeyEvent = " + event);
return false;
}
});
I got it, it works on Edittext in an Activity, but not in a Fragement.我明白了,它适用于活动中的 Edittext,但不适用于 Fragment。
<EditText
android:id="@+id/mEditText"
android:imeOptions="actionSearch"
android:imeActionLabel="搜索"
android:inputType="text"
android:singleLine="true"
android:textSize="18dp"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:paddingLeft="3dp"
android:paddingRight="3dp"
android:textColor="@color/black"
android:layout_marginTop="7dp"
android:layout_marginBottom="7dp"
android:shadowColor="#4b000000"
android:shadowDy="1"
android:shadowDx="1"
android:shadowRadius="1"
android:cursorVisible="true"
android:textCursorDrawable="@null"
android:gravity="center_vertical|left"
android:background="@color/transparent"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
tools:ignore="UnusedAttribute">
<requestFocus/>
</EditText>
mEditText.setImeActionLabel("搜索", EditorInfo.IME_ACTION_SEARCH);
mEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_SEARCH) {
MToastUtil.show("搜索");
}
return false;
}
});
make sure:确保:
inputType = "text"; inputType = "文本";
imeOptions = "actionSend"; imeOptions = "actionSend";
After some little more searching - this was the solution for me ( works also in a fragment ):经过一些更多的搜索 - 这对我来说是解决方案(也适用于片段):
Just remove the imeAction
只需删除
imeAction
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.