Düğmeye tıklamak yerine ekran klavyesindeki "ENTER" tuşunu kullanın


94

Merhaba, aradım EditTextve araştırdım Button. Aranan metni yazdığımda, arama işlevini etkinleştirmek için arama yerine ekran klavyesindeki ENTER tuşunu kullanmak istiyorum Button.

Yardım için şimdiden teşekkürler.

Yanıtlar:


154

Bunu OnKeyListener, kendi EditText.

İşte kendi kodumdan bir örnek. Bir adres EditTextadında addCourseTextişlevi arayacak olan addCourseFromTextBoxya anahtar girmek veya d-pad tıklandığında.

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
Aslında, yazılım tuşları için garanti edilmez. Örneğin, Nexus 7'de (Android 4.2) "ENTER" için çalışmaz ve "GERİ" için çalışır.
Ghedeon

4
@Ghedeon android:inputType="text"düzenleme metninin xml'sini , satır başı olan varsayılan klavyeye karşılık enter tuşunu gösterecek şekilde ayarlayabilirsiniz .
Nick

2
Bu yöntemin Jellybean itibarıyla çalışacağı garanti edilmez, bkz. Developer.android.com/reference/android/view/KeyEvent.html
Constantin

@Ghedeon, öyleyse Nexus 7'de "ENTER" için çalışmasını nasıl sağlarsınız?
HairOfTheDog

3
Bu çözüm birçok cihazda tamamen bozuktur, Nexus 7 dahildir. Onu kullanma!
user3562927

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

Daha sonra EditText öğesi için bir TextView.OnEditorActionListener tanımlayarak eylem düğmesine basılmasını dinleyebilirsiniz. Dinleyicinizde, EditorInfo sınıfında tanımlanan, IME_ACTION_SEND gibi uygun IME eylem kimliğine yanıt verin. Örneğin:

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;
    }
});

Kaynak: https://developer.android.com/training/keyboard-input/style.html


26

EditText'inize şöyle bir öznitelik ekleyebilirsiniz:

android:imeOptions="actionSearch"

1
Bir arama düzenleme metni oluşturuyorsanız, bu daha basit bir çözümdür.
stevyhacker

kümesine ihtiyaç android:inputType="text"yanı
li2

6

EditText'e android: imeOptions = "actionSearch" gibi bir özellik ekleyin

bu, işlevi yapmanın en iyi yoludur

ve imeOptions ayrıca "git" 、 "sonraki" 、 "bitti" gibi başka değerler de içerir.


2

Kotlin lambda da kullanabiliriz

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

Odağın bir sonraki düzenlenebilir alana (eğer varsa) ilerlemesini önlemek için, tuş atma olaylarını yok saymak, ancak tuş oluşturma olaylarını işlemek isteyebilirsiniz. Ayrıca, marjinal olarak daha verimli olacağını varsayarak, önce keyCode'u filtrelemeyi tercih ediyorum. Bu arada, true döndürmenin olayı sizin hallettiğiniz anlamına geldiğini ve başka hiçbir dinleyicinin bunu yapmayacağını unutmayın. Her neyse, işte benim versiyonum.

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

bu, nasıl işlediğimi uygulamamdan birinin örneğidir

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

Bunu başarmanın en güncel yolu şudur:

Bunu XML'deki EditText'inize ekleyin:

android:imeOptions="actionSearch"

Ardından Faaliyet / Parçanızda:

EditText.setOnEditorActionListener { _, actionId, _ ->
    if (actionId == EditorInfo.IME_ACTION_SEARCH) {
        // Do what you want here
        return@setOnEditorActionListener true
    }
    return@setOnEditorActionListener false
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.