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?

War es hilfreich?

Lösung

Im Gegensatz zu den meisten anderen Kontrollen sind EditTexts 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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top