可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I'm trying to set a listener to EditText
when enter button will be pressed.But it didn't fire at all. I tested this on LG Nexus 4 with Android 4.2.2. setOnEditorActionListener
works on Amazon Kindle Fire with Android 2.3 and setImeActionLabel
works nowhere! I also can't set text for Enter
button.Here is code:
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?
回答1:
You can use 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("TEST RESPONSE", "Enter was pressed");
}
}
});
回答2:
Make sure that you have an IME_ACTION set in the layout file:
<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, see http://developer.android.com/guide/topics/ui/controls/text.html.
回答3:
What worked for me is this,I have added this below line to 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
@Override
public boolean onEditorAction(TextView textView, int actionId, KeyEvent keyEvent) {
if (actionId == EditorInfo.IME_ACTION_SEND) {
//implement stuff here
}
}
回答4:
In the xml file add tag android:inputType="text"
to the EditText
回答5:
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;
}
});
回答6:
You can try this to use the 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;
}
});
回答7:
I got it, it works on Edittext in an Activity, but not in a Fragement.
<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;
}
});
回答8:
make sure:
inputType = "text";
imeOptions = "actionSend";
回答9:
After some little more searching - this was the solution for me (works also in a fragment):
Just remove the imeAction