Cómo detectar EditText se centró en Android. ¿No es por el usuario final tocar el texto de edición?
Un android.widget.EditText puede conseguir el foco por dos razones como sé:
Caso 1 . Los usuarios finales tocan el texto de edición por propósito.
- La entrada del teclado de hardware pierde el foco
- EditText, foco claro en el tacto afuera
- El teclado flexible de Android no se mostrará en 2.2 / 2.3, pero sí en 3.0+
- Cambiar el color del cursor editext en API 12
- ¿Una mejor manera de hacer clic en OnClick para los campos EditText?
Caso 2 . El sistema le da automáticamente la opción Editar texto.
- Navegación
- Primer enfoque predeterminado
- …
Mi pregunta es: ¿Cómo detectar el Caso 2 SOLAMENTE ? (¿Listener de eventos?)
La razón por la que quiero detectar el caso 2 es: Quiero establecer la posición actual es la última posición si el texto de edición se enfoque por el caso 2.
EditText.setOnFocusChangeListener es para ambos case1, case2 así que parece que no puedo usar esto.
¡Gracias!
- Teclado personalizado: manejo del tipo de entradaTipo
- ¿Por qué EditText en una vista personalizada de compuesto está reutilizando el texto introducido en otra instancia de vista compuesta?
- Android ScaleAnimation no escala el área seleccionable
- EditText android: sugerencia no desaparece onFocus
- Cursor Edittext es invisible en Android 4.0
- Comportamiento extraño con selectAllOnFocus cuando EditText está en ListView
- Establecer foco en el hilador cuando se selecciona en android
- EditText en la vista de desplazamiento en android
Actualizado
Implemente android.view.View.OnFocusChangeListener
en su actividad (por ejemplo) y configure yourView.setOnFocusChangeListener(yourActivity)
Si lo combina con OnTouchListener
, puede filtrar los toques del usuario ya que onTouch () se llama primero – puede establecer un miembro de clase booleano. Asegúrese de reiniciar el booleano cuando se pierde el foco.
El código debe ser algo así:
... import android.view.View.OnFocusChangeListener; ... public class MainActivity extends Activity implements OnFocusChangeListener, OnTouchListener { boolean userTouchedView; @Override public View onCreateView(...) { ... yourView.setOnFocusChangeListener(this); ... } @Override public void onFocusChange(View v, boolean hasFocus) { if (hasFocus && !userTouchedView)) { //YOUR CASE 2 } else if(!hasFocus) userTouchedView=false; } @Override public boolean onTouch(final View v, MotionEvent event) { if(v==yourView){ userTouchedView=true; } } }