Android: nasıl klavye enter düğmesi "Ara" demek ve tıklama işlemek için?


373

Bunu anlayamıyorum. Bazı uygulamalarda, üzerine dokunduğunuzda ve ekran klavyesini açtığında klavyede enter tuşu yerine "Ara" düğmesi bulunan bir EditText (metin kutusu) bulunur.

Bunu uygulamak istiyorum. Bu Ara düğmesini nasıl uygulayabilir ve Ara düğmesine basıldığını nasıl tespit edebilirim?

Düzenle : Arama düğmesinin nasıl uygulanacağını buldu; XML android:imeOptions="actionSearch"veya Java ile EditTextSample.setImeOptions(EditorInfo.IME_ACTION_SEARCH);. Ancak bu Arama düğmesine basarak kullanıcıyı nasıl ele alabilirim? Bununla bir ilgisi var android:imeActionIdmı?


3
İmeOptions uygulamasının bazı cihazlarda çalışmayabileceğini unutmayın. Bkz bu ve bu .
Ermolai

Yanıtlar:


904

Düzende, arama yöntemi seçeneklerinizi arayacak şekilde ayarlayın.

<EditText
    android:imeOptions="actionSearch" 
    android:inputType="text" />

Java'da editör eylem dinleyicisini ekleyin.

editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        if (actionId == EditorInfo.IME_ACTION_SEARCH) {
            performSearch();
            return true;
        }
        return false;
    }
});

82
OS 2.3.6'da android koyana kadar çalışmıyor: inputType = "text" niteliği.
thanhbinh84

41
android: inputType = "text" de Android 2.3.5 ve 4.0.4'te benim için gerekliydi
ccyrille

6
@Carol EditTextbir alt sınıftır TextView.
howettl

13
android: inputType = "text", 4.4.0 - 4.4.2 (Android Kitkat) için de gereklidir.
user818455

12
Evet, android: inputType = "metin" 5.0'da hala gerekli :)
lionelmessi

19

Kullanıcı aramayı tıkladığında klavyeyi gizle. Robby Pond cevabına ek

private void performSearch() {
    editText.clearFocus();
    InputMethodManager in = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    in.hideSoftInputFromWindow(searchEditText.getWindowToken(), 0);
    //...perform search
}

7

Gelen xmldosya koymak imeOptions="actionSearch"ve inputType="text", maxLines="1":

<EditText
    android:id="@+id/search_box"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="@string/search"
    android:imeOptions="actionSearch"
    android:inputType="text"
    android:maxLines="1" />

5

Kotlin bölgesinde

evLoginPassword.setOnEditorActionListener { _, actionId, _ ->
    if (actionId == EditorInfo.IME_ACTION_DONE) {
        doTheLoginWork()
    }
    true
}

Kısmi Xml Kodu

 <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
       <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"

            android:layout_marginBottom="8dp"
            android:layout_marginTop="8dp"
            android:paddingLeft="24dp"
            android:paddingRight="24dp">

            <EditText
                android:id="@+id/evLoginUserEmail"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="@string/email"
                android:inputType="textEmailAddress"
                android:textColor="@color/black_54_percent" />
        </android.support.design.widget.TextInputLayout>

        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="8dp"
            android:layout_marginTop="8dp"
            android:paddingLeft="24dp"
            android:paddingRight="24dp">

            <EditText
                android:id="@+id/evLoginPassword"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="@string/password"
                android:inputType="textPassword"
                android:imeOptions="actionDone"
                android:textColor="@color/black_54_percent" />
        </android.support.design.widget.TextInputLayout>
</LinearLayout>

1

Bu cevap TextInputEditText içindir:

Düzen XML dosyasında, giriş yöntemi seçeneklerinizi istediğiniz türe ayarlayın. örneğin bitti .

<com.google.android.material.textfield.TextInputLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <com.google.android.material.textfield.TextInputEditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:imeOptions="actionGo"/>

Benzer şekilde, imeOptions öğesini actionSubmit, actionSearch, vb. Olarak da ayarlayabilirsiniz.

Java'da editör eylem dinleyicisini ekleyin.

textInputLayout.getEditText().setOnEditorActionListener(new 

    TextView.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            if (actionId == EditorInfo.IME_ACTION_GO) {
                performYourAction();
                return true;
            }
            return false;
        }
    });

Kotlin kullanıyorsanız:

textInputLayout.editText.setOnEditorActionListener { _, actionId, _ ->
    if (actionId == EditorInfo.IME_ACTION_GO) {
        performYourAction()
    }
    true
}

0

XML ile:

 <EditText
        android:id="@+id/search_edit"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/search"
        android:imeOptions="actionSearch"
        android:inputType="text" />

Java ile:

 editText.clearFocus();
    InputMethodManager in = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
    in.hideSoftInputFromWindow(searchEditText.getWindowToken(), 0);
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.