Cómo hacer algo después de usuario hace clic en mi EditarTexto
-
22-09-2019 - |
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?
Solución
A diferencia de la mayoría de los otros controles, EditText
s 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.