Question

J'ai un EditText qui montre le temps. Après utilisateur clique sur le EditText Je veux montrer un TimePickerDialog, donc je mis un View.OnClickListener à mon EditText.

Mais le OnClickListener se comporte bizarrement - je touche le EditText puis clavier logiciel apparaît (que je ne veux pas). Quand je touche à nouveau, OnClickListener.onClick() est enfin appelé et la boîte de dialogue apparaît.

Que dois-je faire si je veux que le dialogue apparaisse immédiatement?

Était-ce utile?

La solution

Contrairement à la plupart des autres commandes, EditTexts sont focusable alors que le système est en mode « contact ». Le premier événement de clic se concentre le contrôle, tandis que le second événement click se déclenche en fait le OnClickListener. Si vous désactivez la mise en mode contact avec l'android:focusableInTouchMode Voir attribut, le OnClickListener devrait tirer 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" />

Autres conseils

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...
    }
});

Si elle retourne true l'événement est géré et le clavier contextuel coutume. Si vous voudriez le clavier popup de toujours et vous inscrire, cliquez vous auriez le retourner false.

On dirait que vous ne voulez pas que l'utilisateur soit réellement en mesure de taper le EditText. Vous voulez juste pour être en mesure de choisir un temps via un sélecteur de temps. Alors, pourquoi ne pas simplement un bouton qui apparaît un TimePickerDialog? Vous pouvez afficher l'heure qui a été pris dans un TextView.

Ou vous pouvez simplement remplacer la vue EditText avec un TimePicker vue (pas une boîte de dialogue, juste une vue régulière).

Je résolu ce problème en utilisant un bouton personnalisé 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" />

Au lieu d'utilisation tactile Listener Texte 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) {

        }
    });

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. Réglez le OnClickListener et vous avez terminé. En théorie, dans la pratique, vous devez ajouter trop

android:editable="false" 

qui est désapprouvée mais le tour est joué.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top