219

EditTextユーザーがEditTextをクリックしたときにキーボードに完了ボタンを表示できるように、次のプロパティを設定しています。

editText.setImeOptions(EditorInfo.IME_ACTION_DONE);

RadioButtonユーザーがスクリーン キーボードの完了ボタンをクリックすると (入力が終了しました)、状態を変更したいと考えています。

画面キーボードからヒットしたときに完了ボタンを追跡するにはどうすればよいですか?

ソフトウェアキーボードの右下の「完了」ボタンを示すスクリーンショット

4

9 に答える 9

228

私はロバーツとchiragsの答えの組み合わせで終わった:

((EditText)findViewById(R.id.search_field)).setOnEditorActionListener(
        new EditText.OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        // Identifier of the action. This will be either the identifier you supplied,
        // or EditorInfo.IME_NULL if being called due to the enter key being pressed.
        if (actionId == EditorInfo.IME_ACTION_SEARCH
                || actionId == EditorInfo.IME_ACTION_DONE
                || event.getAction() == KeyEvent.ACTION_DOWN
                && event.getKeyCode() == KeyEvent.KEYCODE_ENTER) {
            onSearchAction(v);
            return true;
        }
        // Return true if you have consumed the action, else false.
        return false;
    }
});

更新: 上記のコードは、コールバックを2回アクティブにする場合があります。代わりに、Googleチャットクライアントから取得した次のコードを選択しました。

public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
    // If triggered by an enter key, this is the event; otherwise, this is null.
    if (event != null) {
        // if shift key is down, then we want to insert the '\n' char in the TextView;
        // otherwise, the default action is to send the message.
        if (!event.isShiftPressed()) {
            if (isPreparedForSending()) {
                confirmSendMessageIfNeeded();
            }
            return true;
        }
        return false;
    }

    if (isPreparedForSending()) {
        confirmSendMessageIfNeeded();
    }
    return true;
}
于 2011-03-20T17:03:28.653 に答える
138

これを試してみてください。必要なものでうまくいくはずです:


editText.setOnEditorActionListener(new EditText.OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
    if (actionId == EditorInfo.IME_ACTION_DONE) {
       //do here your stuff f
       return true;
    }
    return false;
    } 
});
于 2011-01-29T08:47:12.340 に答える
27

この質問が古いことは知っていますが、何がうまくいったかを指摘したいと思います。

Android Developers の Web サイト(以下に示す)のサンプル コードを使用してみましたが、うまくいきませんでした。そこで、EditorInfo クラスを確認したところ、IME_ACTION_SEND の整数値が として指定されていることがわかりました0x00000004

Android デベロッパーのサンプル コード:

editTextEmail = (EditText) findViewById(R.id.editTextEmail);
editTextEmail
        .setOnEditorActionListener(new OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView v, int actionId,
                    KeyEvent event) {
                boolean handled = false;
                if (actionId == EditorInfo.IME_ACTION_SEND) {
                    /* handle action here */
                    handled = true;
                }
                return handled;
            }
        });

そのため、整数値をres/values/integers.xmlファイルに追加しました。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <integer name="send">0x00000004</integer>
</resources>

次に、レイアウトファイルres/layouts/activity_home.xmlを次のように編集しました

<EditText android:id="@+id/editTextEmail"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:imeActionId="@integer/send"
  android:imeActionLabel="@+string/send_label"
  android:imeOptions="actionSend"
  android:inputType="textEmailAddress"/>

そして、サンプルコードが機能しました。

于 2014-11-06T17:08:25.087 に答える
17

OnKeyListener を設定し、Done ボタンをリッスンする方法の詳細。

最初に OnKeyListener をクラスの implements セクションに追加します。次に、OnKeyListener インターフェイスで定義された関数を追加します。

/*
 * Respond to soft keyboard events, look for the DONE press on the password field.
 */
public boolean onKey(View v, int keyCode, KeyEvent event)
{
    if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
        (keyCode == KeyEvent.KEYCODE_ENTER))
    {
        // Done pressed!  Do something here.
    }
    // Returning false allows other listeners to react to the press.
    return false;
}

EditText オブジェクトが与えられた場合:

EditText textField = (EditText)findViewById(R.id.MyEditText);
textField.setOnKeyListener(this);
于 2010-03-20T20:48:41.600 に答える