Wie etwas nach Benutzer klickt auf meinem EditText zu tun
-
22-09-2019 - |
Frage
ich eine EditText
dass Shows Zeit. Nach Benutzer klickt auf den EditText
ich eine TimePickerDialog
zeigen wollen, so dass ich eine View.OnClickListener
meiner EditText
gesetzt.
Aber die OnClickListener
weirdly verhält - ich die EditText
berühren und dann Software-Tastatur erscheint (was ich nicht wollen). Als ich wieder berühren, wird OnClickListener.onClick()
schließlich aufgerufen und der Dialog erscheint.
Was soll ich tun, wenn ich will den Dialog sofort angezeigt werden?
Lösung
Im Gegensatz zu den meisten anderen Kontrollen sind EditText
s fokussierbar, während das System in ‚Touch-Modus‘ ist. Die erste Klick Veranstaltung konzentriert sich die Kontrolle, während das zweite Klick-Ereignis tatsächlich die OnClickListener
abfeuert. Wenn Sie deaktivieren Touch-Modus Fokus mit der android:focusableInTouchMode
Ansicht Attribut sollten die OnClickListener
Feuer wie erwartet.
<EditText
android:text="@+id/EditText01"
android:id="@+id/EditText01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusableInTouchMode="false" />
Andere Tipps
Eine andere Lösung ist es, die ontouchlistener
zu verwenden:
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...
}
});
Wenn es true
kehrt das Ereignis behandelt und Tastatur werden nicht Popup. Wenn Sie die Tastatur noch Popup wollen würden und registrieren, klicken Sie würden es false
zurück.
Es klingt wie Sie nicht möchten, dass der Benutzer tatsächlich in der Lage sein, in der EditText einzugeben. Sie wollen einfach nur sie über eine Zeitauswahl, eine Zeit holen können. Warum also nicht nur eine Taste, die eine TimePickerDialog erscheint? Sie könnten die Zeit anzeigen, die in einem Textview aufgenommen wurde.
Oder Sie könnten nur die EditText Ansicht ersetzen mit einem Timepicker Ansicht (kein Dialog, nur eine ganz normale Ansicht).
Ich löste dies durch eine angepasste Schaltfläche wie folgt aus:
<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" />
Statt Touch Listener Verwendung Text ändern 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) {
}
});
Wenn ich das richtig verstanden, Sie brauchen nur so etwas wie
<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" />
nicht bearbeitet werden und anklickbar. Stellen Sie den OnClickListener
und du bist fertig.
In der Theorie in der Praxis sollte man hinzufügen zu
android:editable="false"
, die veraltet ist, aber der Trick funktioniert.