6

我有一个带有imeoptionsas的 Edittext actiongo。当按下软键盘输入按钮时我触发了我的事件。

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);. 可能是什么问题?

4

4 回答 4

11

尝试这个

像这样声明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 一旦尝试这个并回复

于 2014-10-18T07:28:59.033 回答
3
  1. 为输入法连接到文本视图时使用的 EditorInfo.actionId 提供一个值。

    numberEditor.mInputContentType.onEditorActionListener.onEditorAction(this, EditorInfo.IME_NULL, event))

  2. 为输入法连接到文本视图时使用的 EditorInfo.actionLabel 提供一个值。

必须是字符串值,使用 '\;' 为 unicode 字符转义字符,例如 '\n' 或 '\uxxxx'。

于 2014-10-19T06:53:55.983 回答
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);
于 2014-10-10T13:12:11.770 回答
2

我检查了 Android 2.1 和 Android 4.0 版本,您的代码运行良好。如果 EditText 已将选项指定为 ,IME_ACTION_GO则报告事件。如果它被指定为具有独立于被调用或否的值。singleLinetruefalse actionIdIME_NULLsetImeActionLabel

在 TextView.onKeyDown 方法中,我发现在检测到IME_NULL时使用 actionIdKEYCODE_ENTER

mEditor.mInputContentType.onEditorActionListener.onEditorAction(
                                this, EditorInfo.IME_NULL, event))

也许是自定义键盘问题。你用吗?如果是这样,请尝试以下更改:

代替

mModelId.setImeActionLabel("Search Model", KeyEvent.KEYCODE_ENTER);

应该

mModelId.setImeActionLabel("Search Model", EditorInfo.IME_ACTION_GO);
于 2014-10-13T06:13:57.657 回答