Comment faire quelque chose après que l’utilisateur clique sur mon EditText

J’ai un EditText qui montre l’heure. Après que l’utilisateur clique sur EditText je souhaite afficher un TimePickerDialog , alors je définis un View.OnClickListener sur mon EditText .

Mais le OnClickListener se comporte bizarrement – je touche le EditText et le clavier du logiciel apparaît (ce que je ne veux pas). Lorsque je touche à nouveau, OnClickListener.onClick() est finalement appelé et la boîte de dialog apparaît.

Que dois-je faire si je souhaite que la boîte de dialog apparaisse immédiatement?

Contrairement à la plupart des autres contrôles, les EditText peuvent être mis au point lorsque le système est en «mode tactile». Le premier événement de clic focalise le contrôle, tandis que le deuxième événement de clic déclenche réellement le OnClickListener . Si vous désactivez le focus en mode tactile avec l’atsortingbut android:focusableInTouchMode View, le OnClickListener doit se déclencher comme prévu.

  

Une autre solution consiste à utiliser le ontouchlistener :

 edittext.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if(MotionEvent.ACTION_UP == event.getAction()) { mQuaternion_1.setText("" + mQ1); } return true; // return is important... } }); 

S’il retourne true l’événement est géré et le clavier ne va pas s’ouvrir. Si vous souhaitez que le clavier continue à afficher et à enregistrer un clic, vous le ferez renvoyer false .

Il semble que vous ne souhaitiez pas que l’utilisateur puisse réellement taper dans le EditText. Vous voulez simplement qu’ils puissent choisir une heure via un sélecteur de temps. Alors, pourquoi pas un bouton qui affiche un TimePickerDialog? Vous pouvez afficher l’heure sélectionnée dans un TextView.

Ou vous pouvez simplement remplacer la vue EditText par une vue TimePicker (pas une boîte de dialog, juste une vue normale).

J’ai résolu ce problème en utilisant un bouton personnalisé comme celui-ci:

  

Si je comprends bien, vous avez juste besoin de quelque chose comme

  

non modifiable et cliquable. Définissez le OnClickListener et vous avez terminé. En théorie, dans la pratique, vous devriez append aussi

 android:editable="false" 

qui est déconseillé mais fait le tour.

Au lieu de toucher, l’écouteur utilise Text Change Listener:

 editText.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { //yourFunction(); } @Override public void afterTextChanged(Editable s) { } });