Pour résoudre ce problème, il faut d'abord utiliser l'écouteur setOnFocusChangeListener de cet Edittext.
edittext.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus) {
Log.d("focus", "focus lost");
// Do whatever you want here
} else {
Log.d("focus", "focused");
}
}
});
et ensuite, ce que vous devez faire est de surcharger dispatchTouchEvent dans l'activité qui contient l'Edittext voir le code ci-dessous
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
View v = getCurrentFocus();
if ( v instanceof EditText) {
Rect outRect = new Rect();
v.getGlobalVisibleRect(outRect);
if (!outRect.contains((int)event.getRawX(), (int)event.getRawY())) {
Log.d("focus", "touchevent");
v.clearFocus();
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
}
}
}
return super.dispatchTouchEvent(event);
}
Maintenant, ce qui va se passer, c'est que lorsqu'un utilisateur clique à l'extérieur, d'abord cet événement dispatchTouchEvent sera appelé, ce qui effacera le focus de l'editext, maintenant votre OnFocusChangeListener sera appelé que le focus a été changé, maintenant ici vous pouvez faire tout ce que vous vouliez faire, j'espère que cela fonctionne :)
0 votes
Question connexe : stackoverflow.com/q/4165414/782870 . Je pense que la plupart des réponses ont déjà été testées et se sont avérées efficaces.
0 votes
J'ai trouvé cette réponse : stackoverflow.com/a/28939113/2610855 Le meilleur.
0 votes
Vous devriez donner à Sudhanshu Gaur la réponse acceptée, sa solution fonctionne réellement.