Bagaimana cara saya mengabaikan keyboard saat tombol ditekan?
Bagaimana cara saya mengabaikan keyboard saat tombol ditekan?
Jawaban:
Anda ingin menonaktifkan atau mengabaikan Keyboard virtual?
Jika Anda ingin mengabaikannya, Anda dapat menggunakan baris kode berikut di tombol Anda pada acara klik
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);
getActivity()) getCurrentFocus().getWindowToken()untuk argumen pertama hideSoftInputFromWindow(). Juga, lakukan dalam onPause()dan bukan onStop()jika Anda mencoba untuk menghilangkannya saat berganti kegiatan.
Solusi di atas tidak berfungsi untuk semua perangkat dan terlebih lagi menggunakan EditText sebagai parameter. Ini solusi saya, panggil saja metode sederhana ini:
private void hideSoftKeyBoard() {
InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
if(imm.isAcceptingText()) { // verify if the soft keyboard is open
imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
}
}
isAcceptingText()menjadikan jawaban ini lebih baik daripada yang lain
Ini solusi saya
public static void hideKeyboard(Activity activity) {
View v = activity.getWindow().getCurrentFocus();
if (v != null) {
InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
}
}
Inilah solusi Kotlin (mencampur berbagai jawaban di utas)
Buat fungsi ekstensi (mungkin dalam kelas ViewHelpers umum)
fun Activity.dismissKeyboard() {
val inputMethodManager = getSystemService( Context.INPUT_METHOD_SERVICE ) as InputMethodManager
if( inputMethodManager.isAcceptingText )
inputMethodManager.hideSoftInputFromWindow( this.currentFocus.windowToken, /*flags:*/ 0)
}
Maka cukup konsumsi menggunakan:
// from activity
this.dismissKeyboard()
// from fragment
activity.dismissKeyboard()
Solusi pertama dengan InputMethodManager bekerja seperti juara bagi saya, getWindow (). Metode setSoftInputMode tidak di android 4.0.3 HTC Amaze.
@ Ethan Allen, saya tidak perlu membuat teks edit menjadi final. Mungkin Anda menggunakan kelas dalam EditText yang Anda nyatakan metode yang mengandung? Anda bisa menjadikan EditText sebagai variabel kelas dari Kegiatan. Atau cukup deklarasikan EditText baru di dalam kelas / metode dalam dan gunakan findViewById () lagi. Juga, saya tidak menemukan bahwa saya perlu tahu yang EditText dalam formulir memiliki fokus. Saya hanya bisa memilih satu secara sewenang-wenang dan menggunakannya. Seperti itu:
EditText myEditText= (EditText) findViewById(R.id.anyEditTextInForm);
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);
public static void hideSoftInput(Activity activity) {
try {
if (activity == null || activity.isFinishing()) return;
Window window = activity.getWindow();
if (window == null) return;
View view = window.getCurrentFocus();
//give decorView a chance
if (view == null) view = window.getDecorView();
if (view == null) return;
InputMethodManager imm = (InputMethodManager) activity.getApplicationContext().getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm == null || !imm.isActive()) return;
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
} catch (Throwable e) {
e.printStackTrace();
}
}
Solusi ini pastikan menyembunyikan keyboard juga tidak melakukan apa-apa jika tidak dibuka. Ini menggunakan ekstensi sehingga dapat digunakan dari kelas Pemilik Konteks.
fun Context.dismissKeyboard() {
val imm by lazy { this.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager }
val windowHeightMethod = InputMethodManager::class.java.getMethod("getInputMethodWindowVisibleHeight")
val height = windowHeightMethod.invoke(imm) as Int
if (height > 0) {
imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0)
}
}
Dengan menggunakan konteks tampilan, kita dapat mencapai hasil yang diinginkan dengan metode ekstensi berikut di Kotlin:
/**
* Get the [InputMethodManager] using some [Context].
*/
fun Context.getInputMethodManager(): InputMethodManager {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
return getSystemService(InputMethodManager::class.java)
}
return getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
}
/**
* Dismiss soft input (keyboard) from the window using a [View] context.
*/
fun View.dismissKeyboard() = context
.getInputMethodManager()
.hideSoftInputFromWindow(
windowToken
, 0
)
Setelah ini tersedia, telepon saja:
editTextFoo.dismiss()