Cuplikan berikut hanya menyembunyikan keyboard:
public static void hideSoftKeyboard(Activity activity) {
InputMethodManager inputMethodManager =
(InputMethodManager) activity.getSystemService(
Activity.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(
activity.getCurrentFocus().getWindowToken(), 0);
}
Anda dapat menempatkan ini di kelas utilitas, atau jika Anda mendefinisikannya dalam suatu kegiatan, hindari parameter aktivitas, atau panggilan hideSoftKeyboard(this)
.
Bagian tersulit adalah kapan menyebutnya. Anda dapat menulis metode yang berulang-ulang View
di setiap aktivitas Anda, dan memeriksa apakah itu adalah instanceof EditText
jika tidak mendaftar setOnTouchListener
ke komponen itu dan semuanya akan jatuh pada tempatnya. Jika Anda bertanya-tanya bagaimana cara melakukannya, itu sebenarnya cukup sederhana. Inilah yang Anda lakukan, Anda menulis metode rekursif seperti berikut ini, sebenarnya Anda dapat menggunakan ini untuk melakukan apa saja, seperti mengatur tipografi kustom dll ... Ini adalah metode
public void setupUI(View view) {
// Set up touch listener for non-text box views to hide keyboard.
if (!(view instanceof EditText)) {
view.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
hideSoftKeyboard(MyActivity.this);
return false;
}
});
}
//If a layout container, iterate over children and seed recursion.
if (view instanceof ViewGroup) {
for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
View innerView = ((ViewGroup) view).getChildAt(i);
setupUI(innerView);
}
}
}
Itu saja, panggil metode ini setelah Anda setContentView
beraktivitas. Jika Anda bertanya-tanya parameter apa yang akan Anda lewati, itu adalah id
wadah induk. Tetapkan sebuah id
ke wadah induk Anda seperti
<RelativeLayoutPanel android:id="@+id/parent"> ... </RelativeLayout>
dan telepon setupUI(findViewById(R.id.parent))
, itu saja.
Jika Anda ingin menggunakan ini secara efektif, Anda dapat membuat extended Activity
dan memasukkan metode ini, dan membuat semua aktivitas lain dalam aplikasi Anda memperpanjang aktivitas ini dan memanggilnya setupUI()
dalam onCreate()
metode.
Semoga ini bisa membantu.
Jika Anda menggunakan lebih dari 1 aktivitas, tentukan id umum untuk tata letak induk seperti
<RelativeLayout android:id="@+id/main_parent"> ... </RelativeLayout>
Kemudian rentangkan kelas dari Activity
dan definisikan setupUI(findViewById(R.id.main_parent))
Di dalamnya OnResume()
dan perluas kelas ini sebagai ganti dari `` Activityin your program
Ini adalah versi Kotlin dari fungsi di atas:
@file:JvmName("KeyboardUtils")
fun Activity.hideSoftKeyboard() {
currentFocus?.let {
val inputMethodManager = ContextCompat.getSystemService(this, InputMethodManager::class.java)!!
inputMethodManager.hideSoftInputFromWindow(it.windowToken, 0)
}
}