Poniższy fragment kodu po prostu ukrywa klawiaturę:
public static void hideSoftKeyboard(Activity activity) {
InputMethodManager inputMethodManager =
(InputMethodManager) activity.getSystemService(
Activity.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(
activity.getCurrentFocus().getWindowToken(), 0);
}
Możesz umieścić to w klasie użyteczności lub, jeśli definiujesz to w ramach działania, unikaj parametru aktywności lub wywołania hideSoftKeyboard(this)
.
Najtrudniejsze jest, kiedy to nazwać. Możesz napisać metodę, która będzie iterować przez wszystkie View
działania, i sprawdź, czy jest to metoda, instanceof EditText
jeśli nie jest ona zarejestrowana w setOnTouchListener
tym komponencie i wszystko się ułoży. Jeśli zastanawiasz się, jak to zrobić, jest to dość proste. Oto, co robisz, piszesz metodę rekurencyjną, taką jak poniżej, w rzeczywistości możesz tego użyć, aby zrobić wszystko, na przykład skonfigurować niestandardowe kroje pisma itp. Oto metoda
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);
}
}
}
To wszystko, po prostu wywołaj tę metodę po tobie setContentView
w swojej aktywności. Jeśli zastanawiasz się, jaki parametr chcesz przekazać, jest to id
kontener nadrzędny. Przypisz id
do swojego nadrzędnego kontenera jak
<RelativeLayoutPanel android:id="@+id/parent"> ... </RelativeLayout>
i zadzwoń setupUI(findViewById(R.id.parent))
, to wszystko.
Jeśli chcesz efektywnie z tego korzystać, możesz utworzyć metodę rozszerzoną Activity
i wprowadzić tę metodę, a wszystkie inne działania w aplikacji rozszerzyć tę aktywność i wywołać ją setupUI()
w onCreate()
metodzie.
Mam nadzieję, że to pomoże.
Jeśli używasz więcej niż 1 działania, zdefiniuj wspólny identyfikator układu nadrzędnego, np
<RelativeLayout android:id="@+id/main_parent"> ... </RelativeLayout>
Następnie rozszerz klasę Activity
i zdefiniuj w setupUI(findViewById(R.id.main_parent))
jej obrębie OnResume()
i rozszerz tę klasę zamiast `` Aktywnośćin your program
Oto wersja powyższej funkcji Kotlin:
@file:JvmName("KeyboardUtils")
fun Activity.hideSoftKeyboard() {
currentFocus?.let {
val inputMethodManager = ContextCompat.getSystemService(this, InputMethodManager::class.java)!!
inputMethodManager.hideSoftInputFromWindow(it.windowToken, 0)
}
}