O seguinte trecho simplesmente oculta o teclado:
public static void hideSoftKeyboard(Activity activity) {
InputMethodManager inputMethodManager =
(InputMethodManager) activity.getSystemService(
Activity.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(
activity.getCurrentFocus().getWindowToken(), 0);
}
Você pode colocar isso em uma classe de utilitário ou, se estiver definindo em uma atividade, evite o parâmetro de atividade ou chame hideSoftKeyboard(this)
.
A parte mais complicada é quando chamá-lo. Você pode escrever um método que itere em todas as View
suas atividades e verificar se é um instanceof EditText
se não estiver registrando setOnTouchListener
a nesse componente e tudo se encaixará. Caso você esteja se perguntando como fazer isso, é de fato bastante simples. Aqui está o que você faz, você escreve um método recursivo como o seguinte, na verdade, você pode usá-lo para fazer qualquer coisa, como configurar tipos de letra personalizados etc ... Aqui está o 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);
}
}
}
Isso é tudo, basta chamar esse método depois de você setContentView
em sua atividade. Caso você esteja se perguntando qual parâmetro você passaria, é o id
do contêiner pai. Atribua um id
ao seu container pai como
<RelativeLayoutPanel android:id="@+id/parent"> ... </RelativeLayout>
e ligar setupUI(findViewById(R.id.parent))
, isso é tudo.
Se você deseja usar isso efetivamente, poderá criar um Activity
método estendido e colocar esse método, além de fazer com que todas as outras atividades em seu aplicativo estendam essa atividade e chamem- setupUI()
no no onCreate()
método
Espero que ajude.
Se você usar mais de uma atividade, defina o ID comum para o layout pai, como
<RelativeLayout android:id="@+id/main_parent"> ... </RelativeLayout>
Em seguida, estenda uma classe Activity
e defina setupUI(findViewById(R.id.main_parent))
Dentro dela OnResume()
e estenda essa classe em vez de `` Atividadein your program
Aqui está uma versão Kotlin da função acima:
@file:JvmName("KeyboardUtils")
fun Activity.hideSoftKeyboard() {
currentFocus?.let {
val inputMethodManager = ContextCompat.getSystemService(this, InputMethodManager::class.java)!!
inputMethodManager.hideSoftInputFromWindow(it.windowToken, 0)
}
}