Đoạn mã sau chỉ cần ẩn bàn phím:
public static void hideSoftKeyboard(Activity activity) {
InputMethodManager inputMethodManager =
(InputMethodManager) activity.getSystemService(
Activity.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(
activity.getCurrentFocus().getWindowToken(), 0);
}
Bạn có thể đưa nó lên trong một lớp tiện ích hoặc nếu bạn đang xác định nó trong một hoạt động, tránh tham số hoạt động hoặc gọi hideSoftKeyboard(this)
.
Phần khó nhất là khi gọi nó. Bạn có thể viết một phương thức lặp đi lặp lại View
trong mọi hoạt động của mình và kiểm tra xem nó có phải là instanceof EditText
nếu nó không đăng ký setOnTouchListener
thành phần đó không và mọi thứ sẽ rơi đúng vị trí. Trong trường hợp bạn đang tự hỏi làm thế nào để làm điều đó, trên thực tế nó khá đơn giản. Đây là những gì bạn làm, bạn viết một phương thức đệ quy như sau, trên thực tế bạn có thể sử dụng phương thức này để làm bất cứ điều gì, như thiết lập kiểu chữ tùy chỉnh, v.v ... Đây là phương pháp
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);
}
}
}
Đó là tất cả, chỉ cần gọi phương thức này sau khi bạn setContentView
trong hoạt động của bạn. Trong trường hợp bạn đang tự hỏi bạn sẽ vượt qua tham số nào, thì đó là id
container chính. Chỉ định một id
cho container cha mẹ của bạn như
<RelativeLayoutPanel android:id="@+id/parent"> ... </RelativeLayout>
và gọi setupUI(findViewById(R.id.parent))
, đó là tất cả.
Nếu bạn muốn sử dụng nó một cách hiệu quả, bạn có thể tạo một phần mở rộng Activity
và đưa phương thức này vào, và làm cho tất cả các hoạt động khác trong ứng dụng của bạn mở rộng hoạt động này và gọi nó setupUI()
trong onCreate()
phương thức.
Hy vọng nó giúp.
Nếu bạn sử dụng nhiều hơn 1 hoạt động, hãy xác định id chung cho bố cục cha mẹ như
<RelativeLayout android:id="@+id/main_parent"> ... </RelativeLayout>
Sau đó mở rộng một lớp từ Activity
và định nghĩa setupUI(findViewById(R.id.main_parent))
Trong phạm vi của nó OnResume()
và mở rộng lớp này thay vì `` Activityin your program
Đây là phiên bản Kotlin của chức năng trên:
@file:JvmName("KeyboardUtils")
fun Activity.hideSoftKeyboard() {
currentFocus?.let {
val inputMethodManager = ContextCompat.getSystemService(this, InputMethodManager::class.java)!!
inputMethodManager.hideSoftInputFromWindow(it.windowToken, 0)
}
}