57 votes

Android: Comment faire quelque chose après que l'utilisateur clique sur mon EditText

J'ai un EditText qui montre le temps. Lorsque l'utilisateur clique sur le EditText je veux montrer une TimePickerDialog, j'ai donc mis un point de Vue.OnClickListener à mon EditText. Mais le OnClickListener se comporte wierdly - je toucher le EditText et puis le logiciel clavier s'affiche (que je ne veux pas). Quand je touche de nouveau, OnClickListener.onClick() est enfin appelé et la boîte de dialogue s'affiche.

Que dois-je faire si je veux la boîte de dialogue apparaissent immédiatement?

123voto

Kai Points 2436

Contrairement à la plupart des autres contrôles, EditTexts sont peut recevoir le focus alors que le système est en mode tactile'. Le premier événement click se concentre sur le contrôle, tandis que le deuxième événement de clic en fait les feux de l' OnClickListener. Si vous désactivez la touche en mode focus avec l' android:focusableInTouchMode attribut de Vue, l' OnClickListener devraient fonctionner comme prévu.

<EditText android:text="@+id/EditText01" android:id="@+id/EditText01"
    android:layout_width="wrap_content" android:layout_height="wrap_content"
    android:focusableInTouchMode="false" />

55voto

Warpzit Points 11150

Une autre solution est d'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...
        }
    });

Si elle retourne true en cas de manipulation et d'un clavier habitude de popup. Si vous voulez le clavier pour toujours pop-up et cliquez sur enregistrer vous auriez retourne la valeur false.

3voto

mbaird Points 31293

Il semble que vous ne voulez pas que l'utilisateur sera en mesure de taper dans l'EditText. Vous voulez juste pour être en mesure de choisir un moment par l'intermédiaire d'un sélecteur de temps. Alors pourquoi ne pas simplement sur un bouton qui ouvre une TimePickerDialog? Vous pouvez afficher le temps qui a été choisi dans un TextView.

Ou vous pouvez simplement remplacer le EditText vue avec un TimePicker vue (pas de dialogue, juste un affichage normal).

2voto

fhucho Points 8964

J'ai résolu ce problème en utilisant une mesure de Bouton comme ceci:

<Button android:id="@+id/btTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:text="test" android:textSize="20dp"
android:background="@android:drawable/edit_text" />

2voto

dtmilano Points 26472

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

<EditText android:text="@+id/EditText01" android:id="@+id/EditText01"
    android:layout_width="wrap_content" android:layout_height="wrap_content"
    android:clickable="true" android:inputType="none" />

non modifiable et cliquable. Définir l' OnClickListener et vous avez terminé. En théorie, dans la pratique, vous devez ajouter trop

android:editable="false" 

qui est obsolète, mais en fait le truc.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X