设置imeActionLabel时,EditText输入法操作无效

时间:2014-10-10 12:49:40

标签: android android-edittext imeoptions

我有imeoptionsactiongo的Edittext。当按下软键盘输入按钮时,我触发了我的事件。

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 个答案:

答案 0 :(得分:9)

试试这个

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

答案 1 :(得分: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);

答案 2 :(得分:2)

我已经检查过Android 2.1和Android 4.0版本,您的代码运行正常。如果EditText为IME_ACTION_GO指定了singleLine选项,则会报告true事件。如果指定false actionId,则IME_NULL的{​​{1}}值与被调用的setImeActionLabel无关。

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

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

也许是自定义键盘问题。你用的是什么?如果是这样,请尝试这些更改:

而不是

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

应该是

mModelId.setImeActionLabel("Search Model", EditorInfo.IME_ACTION_GO);

答案 3 :(得分:2)

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

    numberEditor.mInputContentType.onEditorActionListener.onEditorAction(                                     这,EditorInfo.IME_NULL,事件))

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

  3. 必须是字符串值,使用'\;'转义unicode字符的'\ n'或'\ uxxxx'等字符。