ตัวอย่างต่อไปนี้ซ่อนคีย์บอร์ด:
public static void hideSoftKeyboard(Activity activity) {
InputMethodManager inputMethodManager =
(InputMethodManager) activity.getSystemService(
Activity.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(
activity.getCurrentFocus().getWindowToken(), 0);
}
คุณสามารถวางสิ่งนี้ไว้ในคลาสยูทิลิตี้หรือถ้าคุณกำหนดไว้ในกิจกรรมให้หลีกเลี่ยงพารามิเตอร์กิจกรรมหรือการโทร hideSoftKeyboard(this)
คุณสามารถใส่นี้ขึ้นมาในระดับยูทิลิตี้หรือหากคุณกำหนดได้ภายในกิจกรรมหลีกเลี่ยงพารามิเตอร์กิจกรรมหรือโทร
ส่วนที่ยากที่สุดคือเวลาที่จะเรียกมันว่า คุณสามารถเขียนวิธีที่วนซ้ำView
ในทุกกิจกรรมของคุณและตรวจสอบว่าเป็นวิธีที่instanceof EditText
ไม่ได้ลงทะเบียน a setOnTouchListener
ไปยังองค์ประกอบนั้นหรือไม่และทุกอย่างจะเข้าที่ ในกรณีที่คุณสงสัยว่าจะทำอย่างไรจริง ๆ แล้วมันค่อนข้างง่าย นี่คือสิ่งที่คุณทำคุณเขียนวิธีแบบเรียกซ้ำเช่นในความเป็นจริงคุณสามารถใช้วิธีนี้เพื่อทำอะไรก็ได้เช่นการตั้งค่าแบบอักษรที่กำหนดเองเป็นต้น ... นี่คือวิธีการ
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);
}
}
}
นั่นคือทั้งหมดเพียงแค่เรียกวิธีนี้หลังจากที่คุณsetContentView
อยู่ในกิจกรรมของคุณ ในกรณีที่คุณสงสัยว่าคุณจะส่งผ่านพารามิเตอร์ใดมันเป็นid
ของคอนเทนเนอร์หลัก กำหนดให้id
กับคอนเทนเนอร์หลักของคุณเช่น
<RelativeLayoutPanel android:id="@+id/parent"> ... </RelativeLayout>
และโทร setupUI(findViewById(R.id.parent))
นั่นคือทั้งหมดที่
หากคุณต้องการใช้สิ่งนี้อย่างมีประสิทธิภาพคุณสามารถสร้างส่วนขยายActivity
และใส่วิธีนี้และทำให้กิจกรรมอื่น ๆ ทั้งหมดในใบสมัครของคุณขยายกิจกรรมนี้และเรียกมันsetupUI()
ในonCreate()
วิธีการ
หวังว่ามันจะช่วย
หากคุณใช้มากกว่า 1 กิจกรรมให้กำหนดรหัสทั่วไปให้กับโครงร่างหลักเช่น
<RelativeLayout android:id="@+id/main_parent"> ... </RelativeLayout>
จากนั้นขยายคลาสจากActivity
และนิยามsetupUI(findViewById(R.id.main_parent))
ภายในOnResume()
และขยายคลาสนี้แทนกิจกรรม ``in your program
นี่คือฟังก์ชั่นด้านบนเวอร์ชั่น Kotlin:
@file:JvmName("KeyboardUtils")
fun Activity.hideSoftKeyboard() {
currentFocus?.let {
val inputMethodManager = ContextCompat.getSystemService(this, InputMethodManager::class.java)!!
inputMethodManager.hideSoftInputFromWindow(it.windowToken, 0)
}
}