Pregunta

Tengo una EditText ese momento espectáculos. Después usuario pulsa el EditText Quiero mostrar un TimePickerDialog, así que me puse un View.OnClickListener a mi EditText.

Pero el OnClickListener está comportando extrañamente - toco el EditText y luego aparece el teclado de software (que no quiero). Cuando toco de nuevo, OnClickListener.onClick() finalmente se llamó y los Aparece el diálogo.

¿Qué debo hacer si quiero el cuadro de diálogo que aparezca inmediatamente?

¿Fue útil?

Solución

A diferencia de la mayoría de los otros controles, EditTexts son enfocable mientras el sistema está en 'modo táctil'. El primer evento de clic se centra el control, mientras que el segundo evento click en realidad dispara el OnClickListener. Si se deshabilita de modo de enfoque contacto con el atributo android:focusableInTouchMode Vista, el OnClickListener debe disparar como se esperaba.

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

Otros consejos

Otra solución es utilizar el 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 devuelve true éste se controla y la costumbre de teclado emergente. Si usted desea que el teclado para emergente sigue y registra clic que tendría que volver false.

Parece que usted no desea que el usuario sea realmente capaz de escribir en el EditarTexto. Lo que desea que sean capaces de elegir un momento a través de un selector de hora. ¿Por qué no simplemente un botón que aparece un TimePickerDialog? Se podría mostrar el tiempo que fue recogido en un TextView.

O puede simplemente reemplazar la vista EditarTexto con un TimePicker vista (no un cuadro de diálogo, sólo una vista regular).

Me resuelto mediante el uso de un botón personalizado como esto:

<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" />

En lugar de contacto de escucha de uso Texto Cambio Oyente:

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 he entendido bien sólo necesita algo así como

<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" />

no se puede editar y hacer clic. Ajuste el OnClickListener y ya está. En teoría, en la práctica se debe añadir también

android:editable="false" 

, que está en desuso, pero hace el truco.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top