El siguiente fragmento simplemente oculta el teclado:
public static void hideSoftKeyboard(Activity activity) {
InputMethodManager inputMethodManager =
(InputMethodManager) activity.getSystemService(
Activity.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(
activity.getCurrentFocus().getWindowToken(), 0);
}
Puede poner esto en una clase de utilidad, o si lo está definiendo dentro de una actividad, evite el parámetro de actividad o llame hideSoftKeyboard(this)
.
La parte más complicada es cuándo llamarlo. Puede escribir un método que recorra cada View
una de las actividades de su actividad y verifique si es un instanceof EditText
registro setOnTouchListener
de ese componente y todo estará en su lugar. En caso de que se pregunte cómo hacerlo, de hecho es bastante simple. Esto es lo que haces, escribes un método recursivo como el siguiente, de hecho, puedes usar esto para hacer cualquier cosa, como configurar tipos de letra personalizados, etc. Aquí está el método
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);
}
}
}
Eso es todo, simplemente llame a este método después setContentView
de su actividad. En caso de que se pregunte qué parámetro pasaría, es el id
del contenedor principal. Asigne un id
a su contenedor principal como
<RelativeLayoutPanel android:id="@+id/parent"> ... </RelativeLayout>
y llama setupUI(findViewById(R.id.parent))
, eso es todo.
Si desea utilizar de manera eficaz, es posible crear una extendida Activity
y poner este método en, y hacer todas las otras actividades en su aplicación se extienden esta actividad y llamar a su setupUI()
en el onCreate()
método.
Espero eso ayude.
Si usa más de 1 actividad, defina la identificación común para el diseño primario como
<RelativeLayout android:id="@+id/main_parent"> ... </RelativeLayout>
Luego extienda una clase desde Activity
y defina setupUI(findViewById(R.id.main_parent))
Dentro de ella OnResume()
y extienda esta clase en lugar de `` Actividadin your program
Aquí hay una versión de Kotlin de la función anterior:
@file:JvmName("KeyboardUtils")
fun Activity.hideSoftKeyboard() {
currentFocus?.let {
val inputMethodManager = ContextCompat.getSystemService(this, InputMethodManager::class.java)!!
inputMethodManager.hideSoftInputFromWindow(it.windowToken, 0)
}
}