버튼을 클릭하는 대신 소프트 키보드의 "ENTER"키를 사용합니다.


94

안녕하세요 저는 검색 EditText하고 검색했습니다 Button. 검색된 텍스트를 입력 할 때 검색 기능을 활성화하기 위해 검색 대신 소프트 키보드의 ENTER 키 를 사용하고 싶습니다 Button.

미리 도움을 주셔서 감사합니다.

답변:


155

당신은 OnKeyListener당신의 EditText.

다음은 내 코드의 샘플입니다. Enter 키 또는 D- 패드를 클릭 할 때 함수를 호출 하는 EditText이름 이 있습니다.addCourseTextaddCourseFromTextBox

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"에서는 작동합니다.
Ghedeon

4
@Ghedeon android:inputType="text"은 캐리지 리턴이있는 기본 키보드에 비해 Enter 키를 표시하도록 편집 텍스트에 대한 xml을 설정할 수 있습니다 .
Nick

2
이 메서드는 Jellybean에서 작동하도록 보장되지 않습니다. developer.android.com/reference/android/view/KeyEvent.html
Constantin

@Ghedeon 그렇다면 Nexus 7에서 "ENTER"에 대해 작동하도록하려면 어떻게해야합니까?
HairOfTheDog 2013-09-05

3
이 솔루션은 Nexus 7을 포함한 많은 기기에서 완전히 손상되었습니다. 그것을 사용하지 마십시오!
user3562927 apr

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를 정의하여 작업 버튼의 누름을 수신 할 수 있습니다. 리스너에서 EditorInfo 클래스에 정의 된 적절한 IME 작업 ID (예 : IME_ACTION_SEND)에 응답합니다. 예를 들면 :

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

설정해야 할 android:inputType="text"뿐만 아니라
LI2

6

android : imeOptions = "actionSearch"와 같은 EditText에 속성 추가

이것이 기능을 수행하는 가장 좋은 방법입니다.

imeOptions에는 "go"、 "next"、 "done"등과 같은 다른 값도 있습니다.


2

Kotlin lambda를 사용할 수도 있습니다.

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에서 먼저 필터링하는 것을 선호합니다. 참을 반환한다는 것은 이벤트를 처리했음을 의미하므로 다른 리스너는 처리하지 않습니다. 어쨌든, 여기 내 버전입니다.

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.