Bagaimana cara membuat tombol 'Selesai' Android EditView dan menyembunyikan keyboard saat diklik?


115

Saat pengguna mengklik EditView, Android membuka keyboard sehingga pengguna dapat menulis di EditView.

Masalahnya, saat pengguna selesai menulis, tidak ada cara untuk menyembunyikan keyboard. Pengguna harus menekan tombol kembali untuk menyembunyikan keyboard.

Apakah ada cara untuk menampilkan Donetombol di keyboard yang akan menyembunyikan keyboard?


Jawaban:



148

Pertama, Anda perlu mengatur android:imeOptionsatribut sama dengan actionDoneuntuk EditText target Anda seperti yang terlihat di bawah ini. Itu akan mengubah tombol 'KEMBALIKAN' di keyboard lunak EditText menjadi tombol 'SELESAI'.

<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 menghapus tautan itu. Terima kasih
Paresh Mayani

19
Saya harus menambahkan android:singleLine="true"agar ini berfungsi melalui xml
Jacksonkr

4
android: singleLine tidak digunakan lagi. Gunakan android: maxLines = "1".
FariborZ

Ya @FariborZ singleLine tidak digunakan lagi sekarang.
Paresh Mayani

1
Catatan penting: singleLine tidak sama dengan maxLines. Kesalahpahaman ini menyebabkan banyak masalah bagi semua orang, kita perlu mencatatnya di mana-mana. stackoverflow.com/questions/30879471/…
milosmns

86

Sertakan keduanya imeOptions dan 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"

Dalam file XML berfungsi dengan baik. Tetapi ini juga akan menyebabkan editTextuntuk tetap mengetik dalam satu baris yang mungkin tidak Anda inginkan. Jadi menambahkan mengikuti ke kode Anda akan memastikan bahwa Anda tidak akan berakhir mengetik semuanya dalam satu baris.

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

1
Terima kasih, Demo pada 12, waktunya 11:58 dan Anda memperbaiki masalah saya pada 11:59: p
shahzain ali

android: singleLine = "true" sudah tidak digunakan lagi. Jadi gunakan, android: lines = "1"
Gowtham. R

20

Untuk menyelesaikan Tombol

editText.setImeOptions(EditorInfo.IME_ACTION_DONE);

dan

android:inputType="text" dalam xml

Untuk penanganan selesai diklik dari keyboard

    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

Gunakan ini:

android:singleLine="true"

Ya ... jika tidak, bagaimana cara membedakan ke baris berikutnya dengan menutup keyboard?
jstewart379

Inilah yang akhirnya berhasil untuk saya. Saya memutuskan untuk melakukan kesalahan dengan memilikinya actionDonejuga, kalau-kalau beberapa perangkat bereaksi berbeda.
Jacksonkr

10

Gunakan dua baris ini untuk Anda EditText

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

atau Anda dapat mencapainya secara terprogram dengan baris ini.

editText.setImeOptions(EditorInfo.IME_ACTION_DONE);

7

Jika properti tidak berubah untuk widget mungkin lebih baik digunakan seperti android:imeOptions="actionDone"di xmlfile layout .




5

ActionDone digunakan saat mengklik tombol berikutnya di keyboard saat keyboard bersembunyi. Gunakan di Edit Teks atau AppcompatEdit

XML

1.1 Jika Anda menggunakan AppCompatEdittext

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

1.2 Jika Anda menggunakan Edittext

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

JAWA

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

5

Saya harus menunjukkan itu karena banyak orang dapat berjuang untuk itu tanpa mengetahui masalahnya.

Jika Anda ingin kb bersembunyi saat mengklik Done, dan Anda mengatur android:imeOptions="actionDone"& android:maxLines="1" tanpa mengatur EditText Anda TIDAKinputType akan bekerja sebagai default untuk EditText tidak seperti yang dipikirkan banyak orang.inputType"text"

jadi, pengaturan hanya inputTypeakan memberikan hasil yang Anda inginkan apapun apa yang Anda pengaturannya seperti "text", "number", ... dll.


2

Sebenarnya Anda dapat mengatur teks khusus ke tombol biru kecil itu. Di file xml gunakan saja

android:imeActionLabel="whatever"

di EditText Anda.

Atau dalam penggunaan file java

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

Saya memilih IME_ACTION_DONE secara sewenang-wenang sebagai contoh dari apa yang harus dimasukkan di parameter kedua untuk fungsi ini. Daftar lengkap tindakan ini dapat ditemukan di sini .

Perlu dicatat bahwa ini tidak akan menyebabkan teks muncul di semua keyboard di semua perangkat. Beberapa keyboard tidak mendukung teks pada tombol itu (mis. Swiftkey). Dan beberapa perangkat juga tidak mendukungnya. Aturan yang baik adalah, jika Anda sudah melihat teks di tombol, ini akan mengubahnya menjadi apa pun yang Anda inginkan.


2

Solusi Kotlin

Cara langsung untuk menangani keyboard sembunyikan + tindakan selesai di Kotlin adalah:

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

Ekstensi Kotlin

Gunakan ini untuk memanggil edittext.onDone {/*action*/}kode utama Anda. Menjaga agar lebih mudah dibaca dan dipelihara

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

Ekstensi Keyboard Tambahan

Jika Anda ingin lebih banyak cara untuk menyederhanakan bekerja dengan keyboard (tunjukkan, tutup, fokus): Baca posting ini

Jangan lupa untuk menambahkan opsi ini ke edittext Xml Anda, jika tidak dalam kode

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

Butuh inputType="textMultiLine"dukungan? Baca posting ini dan jangan menambahkan imeOptionsatau inputTypedalam Xml


0

gunakan ini dalam pandanganmu

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

0

Jika Anda menggunakan

android:imeOptions="actionDone" 

maka Anda harus menggunakan

android:inputType="text"

maka hanya Anda yang dapat melihat tombol Tindakan Selesai di Keyboard.


0

Jika Anda tidak menginginkan tombol sama sekali (mis. Anda mengembangkan GUI untuk orang buta di mana ketukan tidak dapat diposisikan dan Anda mengandalkan ketukan tunggal / ganda / panjang):

text.setItemOptions(EditorInfo.IME_ACTION_NONE)

Atau di Kotlin:

text.imeOptions = EditorInfo.IME_ACTION_NONE
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.