Nasıl bir Android EditView 'Bitti' düğmesi yapabilirim ve tıklandığında klavyeyi gizleyebilirim?


115

Kullanıcı üzerine tıkladığında EditView, Android klavyeyi açar, böylece kullanıcı EditView.

Sorun şu ki, kullanıcı yazmayı bitirdiğinde klavyeyi gizlemenin bir yolu yoktur. Kullanıcının klavyeyi gizlemek için geri düğmesine basması gerekir.

DoneKlavyede klavyeyi gizleyecek bir düğme görüntülemenin bir yolu var mı ?


Yanıtlar:


140

TextView.setImeOptions kullanın ve actionDone geçirin. sevmektextView.setImeOptions(EditorInfo.IME_ACTION_DONE);


8
textView.setImeOptions(EditorInfo.IME_ACTION_DONE);
sulai

14
Bunun textView.singleLine(true)programlı olarak çalışmasını sağlamak için eklemem gerekiyordu.
Jacksonkr

ancak bu, android 2.3'ten beri kullanımdan kaldırıldı
Sumit Kumar Saha

148

Öncelikle, aşağıda görüldüğü gibi hedef EditText'iniz için android:imeOptionsözniteliği eşit ayarlamanız gerekir actionDone. Bu, EditText'inizin yazılım klavyesindeki 'GERİ DÖN' düğmenizi 'BİTTİ' düğmesine değiştirecektir.

<EditText 
    android:id="@+id/edittext_done"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:hint="Enter some text"
    android:imeOptions="actionDone"
    />

@Michael bu bağlantıyı kaldırdı. Teşekkürler
Paresh Mayani

19
Bunu android:singleLine="true"xml aracılığıyla çalıştırmak için eklemem gerekiyordu
Jacksonkr

4
android: singleLine kullanımdan kaldırıldı. Android: maxLines = "1" kullanın.
FariborZ

Evet @ FariborZ singleLine artık kullanımdan kaldırıldı.
Paresh Mayani

1
Önemli not: singleLine, maxLines ile aynı değildir. Bu yanlış anlama herkes için bir çok soruna neden oluyor, her yerde olduğunu belirtmemiz gerekiyor. stackoverflow.com/questions/30879471/…
milosmns

86

İkisini de dahil et imeOptions ve singleLine :

<EditText 
   android:id="@+id/edittext_done"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:imeOptions="actionDone"
   android:singleLine="true"
   />

35
android:imeActionLabel="Done" 
android:singleLine="true"

XML dosyasında gayet iyi çalışıyor. Ancak bu aynı zamanda editTextistemeyebileceğiniz tek bir satıra yazmaya devam etmenize neden olacaktır. Bu nedenle, kodunuza aşağıdakileri eklemek, her şeyi tek bir satıra yazmayacağınızdan emin olmanızı sağlayacaktır.

mainText.setHorizontallyScrolling(false);
mainText.setMaxLines("Maximum integer value that you want to provide");

1
Teşekkürler, Demo
12'deydi

android: singleLine = "true" kullanımdan kaldırıldı. Yani, android: lines = "1"
Gowtham'ı kullanın. R

20

Bitirmek için Düğme

editText.setImeOptions(EditorInfo.IME_ACTION_DONE);

ve

android:inputType="text" xml'de

Klavyeden yapılan tıklananlar üzerinde işlem yapmak için

    editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event){
            if(actionId == EditorInfo.IME_ACTION_DONE){
                // Your action on done
                return true;
            }
            return false;
        }
    });

'


14

Bunu kullan:

android:singleLine="true"

Evet ... aksi halde bir sonraki satıra gitmeyi klavyeyi kapatmayla nasıl ayırt edecek?
jstewart379

Bu benim için işe yarayan şeydi. actionDoneBazı cihazların farklı tepki vermesi durumunda, orada da bulunmakta hata yapmaya karar verdim .
Jacksonkr

10

Bu iki satırı kendi EditText

android:imeActionLabel="Done"
android:singleLine="true"

veya bunu Programlı olarak bu satırla gerçekleştirebilirsiniz.

editText.setImeOptions(EditorInfo.IME_ACTION_DONE);

7

Widget için özellik değişmezse android:imeOptions="actionDone", mizanpaj xmldosyasındaki gibi kullanmak daha iyi olabilir .




5

ActionDone, klavyenin gizlendiği zaman klavyede bir sonraki düğmeye tıklandığında kullanılır. Metni Düzenle veya AppcompatEdit'te kullanın

XML

1.1 AppCompatEdittext kullanıyorsanız

    <android.support.v7.widget.AppCompatEditText
    android:id="@+id/edittext"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:imeOptions="actionDone"/>

1.2 Edittext kullanıyorsanız

    <EditText
    android:id="@+id/edittext"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:imeOptions="actionDone"/>

JAVA

EditText edittext= (EditText) findViewById(R.id.edittext);
edittext.setImeOptions(EditorInfo.IME_ACTION_DONE);

5

Pek çok insan sorunu bilmeden bununla mücadele edebileceği için bunu belirtmeliyim.

Tıklarken gizlemek kb istiyorsanız Doneve ayarladığınız android:imeOptions="actionDone"& android:maxLines="1" olmadan sizin EditText ayarı inputTypeo olacak DEĞİL varsayılan olarak çalışma inputTypeEditText için değil "text"bir sürü insan düşünmek.

böylece, sadece ayar inputTypeistediğiniz sonuçları verecektir ne hoşuna ayarını ne "text", "number"vb ....


2

Aslında bu küçük mavi düğmeye özel metin ayarlayabilirsiniz. Xml dosyasında sadece şunu kullanın:

android:imeActionLabel="whatever"

EditText'inizde.

Veya java dosyası kullanımında

etEditText.setImeActionLabel("whatever", EditorInfo.IME_ACTION_DONE);

Bu işlev için ikinci parametrede nelerin olması gerektiğine dair rastgele bir örnek olarak IME_ACTION_DONE seçeneğini seçiyorum . Bu eylemlerin tam listesi burada bulunabilir .

Bunun tüm cihazlarda tüm klavyelerde metnin görünmesine neden olmayacağı unutulmamalıdır. Bazı klavyeler bu düğmedeki metni desteklemez (örneğin, hızlı tuş). Ve bazı cihazlar da desteklemiyor. İyi bir kural, düğmenin üzerinde zaten bir metin görürseniz, bu onu istediğiniz gibi değiştirecektir.


2

Kotlin Çözümü

Kotlin'de klavyeyi gizle + yapılan eylemi işlemenin doğrudan yolu şudur:

// Set action
edittext.setOnEditorActionListener { _, actionId, _ ->
    if (actionId == EditorInfo.IME_ACTION_DONE) {
        // Hide Keyboard
        val inputMethodManager = context.getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
        inputMethodManager.hideSoftInputFromWindow(windowToken, 0)
        true
    }
    false
}

Kotlin Uzantısı

edittext.onDone {/*action*/}Ana kodunuzu aramak için bunu kullanın . Daha okunaklı ve sürdürülebilir tutar

edittext.onDone { edittext.hideKeyboard() }

fun View.hideKeyboard() {
    val inputMethodManager = context.getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
    inputMethodManager.hideSoftInputFromWindow(windowToken, 0)
}

fun EditText.onDone(callback: () -> Unit) {
    // These lines optional if you don't want to set in Xml
    imeOptions = EditorInfo.IME_ACTION_DONE
    maxLines = 1
    setOnEditorActionListener { _, actionId, _ ->
        if (actionId == EditorInfo.IME_ACTION_DONE) {
            callback.invoke()
            true
        }
        false
    }
}

Ek Klavye Uzantıları

Klavye ile çalışmayı basitleştirmek için daha fazla yol istiyorsanız (göster, kapat, odaklan): Bu yazıyı okuyun

Kodda değilse bu seçenekleri edittext Xml'nize eklemeyi unutmayın.

<EditText ...
    android:imeOptions="actionDone"
    android:inputType="text"/>

inputType="textMultiLine"Desteğe mi ihtiyacınız var ? Bu yazıyı okuyun ve Xml eklemeyin imeOptionsveya eklemeyininputType


0

bunu senin görüşünde kullan

<EditText 
    ....
    ....
    android:imeOptions="actionDone" 
    android:id="@+id/edtName"
    />

0

Eğer kullanıyorsanız

android:imeOptions="actionDone" 

o zaman kullanmalısın

android:inputType="text"

o zaman Klavyede Eylem Bitti düğmesini yalnızca siz görebilirsiniz.


0

Hiç bir düğme istemiyorsanız (örneğin, dokunmanın konumlandırılamadığı ve tek / çift / uzun dokunuşlara güvendiğiniz, görme engelli kişiler için bir GUI geliştiriyorsanız):

text.setItemOptions(EditorInfo.IME_ACTION_NONE)

Veya Kotlin'de:

text.imeOptions = EditorInfo.IME_ACTION_NONE
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.