studio - missing accessibility label where min sdk 17 you should provide an android hint
Cómo hacer algo después de que el usuario haga clic en mi EditText (6)
Tengo un EditText
que muestra el tiempo. Después de que el usuario haga clic en EditText
, quiero mostrar un TimePickerDialog
, así que establezco un View.OnClickListener
en mi EditText
.
Pero OnClickListener
está comportando de manera extraña: toco el EditText
y luego aparece el teclado del software (que no quiero). Cuando vuelvo a tocar, finalmente se llama a OnClickListener.onClick()
y aparece el cuadro de diálogo.
¿Qué debo hacer si quiero que el diálogo aparezca inmediatamente?
A diferencia de la mayoría de los otros controles, los EditText
pueden EditText
mientras el sistema está en "modo táctil". El primer evento de clic enfoca el control, mientras que el segundo evento de clic OnClickListener
el OnClickListener
. Si deshabilita el enfoque en modo táctil con el atributo de vista de android:focusableInTouchMode
OnClickListener
, el OnClickListener
debe disparar como se espera.
<EditText
android:text="@+id/EditText01"
android:id="@+id/EditText01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusableInTouchMode="false" />
En lugar de Touch Listener, use Text 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) {
}
});
Otra solución es usar 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 retorna true
el evento se maneja y el teclado no se abre. Si desea que el teclado todavía aparezca y se registre, haga clic en él para que devuelva false
.
Parece que no desea que el usuario pueda escribir realmente el texto de edición. Solo desea que puedan elegir una hora a través de un selector de tiempo. Entonces, ¿por qué no solo un botón que muestra un TimePickerDialog? Podrías mostrar el tiempo que fue seleccionado en un TextView.
O simplemente puede reemplazar la vista EditText con una vista TimePicker (no un cuadro de diálogo, solo una vista normal).
Resolví esto usando un botón personalizado como este:
<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" />
Si entiendo correctamente solo necesitas algo 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 editable y pulsable. Establecer el OnClickListener
y ya está. En teoría, en la práctica deberías sumar también.
android:editable="false"
que está en desuso pero hace el truco.