Comment faire quelque chose après que l'utilisateur clique sur ma EditText
-
22-09-2019 - |
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?
La solution
Contrairement à la plupart des autres commandes, EditText
s 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é.