简体   繁体   English

Android setOnEditorActionListener() 不会触发

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM