ボタンをクリックする代わりに、ソフトキーボードの「ENTER」キーを使用します


94

こんにちは、検索EditTextして検索しましたButton。検索したテキストを入力するとき、検索の代わりにソフトキーボードのEnterキーを使用してButton検索機能をアクティブにしたいと思います

事前に助けてくれてありがとう。

回答:


155

をに設定することでそれをOnKeyListener行いますEditText

これが私のコードのサンプルです。私がいるEditTextという名前のaddCourseText関数を呼び出しますされ、addCourseFromTextBoxいずれかのキー入力やDパッドがクリックされたとき。

addCourseText = (EditText) findViewById(R.id.clEtAddCourse);
addCourseText.setOnKeyListener(new OnKeyListener()
{
    public boolean onKey(View v, int keyCode, KeyEvent event)
    {
        if (event.getAction() == KeyEvent.ACTION_DOWN)
        {
            switch (keyCode)
            {
                case KeyEvent.KEYCODE_DPAD_CENTER:
                case KeyEvent.KEYCODE_ENTER:
                    addCourseFromTextBox();
                    return true;
                default:
                    break;
            }
        }
        return false;
    }
});

4
実際には、ソフトキーについては保証されていません。たとえば、Nexus 7(Android 4.2)の「ENTER」では機能せず、「BACK」では機能しません。
ゲデオン2012年

4
@Ghedeon android:inputType="text"では、エディットテキストのxmlを設定して、Enterキーとキャリッジリターンのあるデフォルトのキーボードを表示できます。
Nick

2
このメソッドはJellybeanの時点で機能することが保証されていません。developer.android.com/ reference / android / view / KeyEvent.html
Constantin

@Ghedeonでは、Nexus 7の「ENTER」で機能させるにはどうすればよいですか。
HairOfTheDog 2013

3
このソリューションは、Nexus 7を含む多くのデバイスで完全に機能しません。使わないで!
user3562927 2017

44
<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" />

その後、EditText要素のTextView.OnEditorActionListenerを定義することにより、アクションボタンの押下をリッスンできます。リスナーで、IME_ACTION_SENDなど、EditorInfoクラスで定義された適切なIMEアクションIDに応答します。例えば:

EditText editText = (EditText) findViewById(R.id.search);
editText.setOnEditorActionListener(new OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        boolean handled = false;
        if (actionId == EditorInfo.IME_ACTION_SEND) {
            sendMessage();
            handled = true;
        }
        return handled;
    }
});

ソース:https : //developer.android.com/training/keyboard-input/style.html


26

次のようにEditTextに属性を追加できます。

android:imeOptions="actionSearch"

1
これは、検索編集テキストを作成する場合の簡単なソリューションです。
stevyhacker 2016年

android:inputType="text"同様に設定する必要があります
li2

6

android:imeOptions = "actionSearch"のようなEditTextに属性を追加します

これは機能を実行する最良の方法です

imeOptionsには、「go」、「next」、「done」などの他の値もあります。


2

Kotlinラムダも使用できます

editText.setOnKeyListener { _, keyCode, keyEvent ->
        if (keyEvent.action == KeyEvent.ACTION_DOWN && keyCode == KeyEvent.KEYCODE_ENTER) {
            Log.d("Android view component", "Enter button was pressed")
            return@setOnKeyListener true
        }
        return@setOnKeyListener false
    }

0

フォーカスが次の編集可能なフィールド(ある場合)に進むのを避けるために、キーダウンイベントを無視して、キーアップイベントを処理することができます。私はまた、それがわずかに効率的であると仮定して、最初にkeyCodeでフィルタリングすることを好みます。ちなみに、trueを返すと、イベントを処理したことになるので、他のリスナーは処理を行わないことに注意してください。とにかく、これが私のバージョンです。

ETFind.setOnKeyListener(new OnKeyListener()
{
    public boolean onKey(View v, int keyCode, KeyEvent event)
    {
        if (keyCode ==  KeyEvent.KEYCODE_DPAD_CENTER
        || keyCode ==  KeyEvent.KEYCODE_ENTER) {

            if (event.getAction() == KeyEvent.ACTION_DOWN) {
                // do nothing yet
            } else if (event.getAction() == KeyEvent.ACTION_UP) {
                        findForward();      
            } // is there any other option here?...

            // Regardless of what we did above,
            // we do not want to propagate the Enter key up
            // since it was our task to handle it.
            return true;

        } else {
            // it is not an Enter key - let others handle the event
            return false;
        }
    }

});

0

これは私のアプリのサンプルです

 //searching for the Edit Text in the view    
    final EditText myEditText =(EditText)view.findViewById(R.id.myEditText);
        myEditText.setOnKeyListener(new View.OnKeyListener() {
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                 if (event.getAction() == KeyEvent.ACTION_DOWN)
                      if ((keyCode == KeyEvent.KEYCODE_DPAD_CENTER) ||
                             (keyCode == KeyEvent.KEYCODE_ENTER)) {
                                //do something
                                //true because you handle the event
                                return true;
                               }
                       return false;
                       }
        });

0

これを達成するための最も更新された方法は次のとおりです。

これをXMLのEditTextに追加します。

android:imeOptions="actionSearch"

次に、アクティビティ/フラグメントで:

EditText.setOnEditorActionListener { _, actionId, _ ->
    if (actionId == EditorInfo.IME_ACTION_SEARCH) {
        // Do what you want here
        return@setOnEditorActionListener true
    }
    return@setOnEditorActionListener false
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.