Establecer el enfoque inicial en una aplicación de Android


86

En mi aplicación de Android enfoca automáticamente el primero Buttonque tengo en mi diseño, dándole un contorno naranja. ¿Cómo puedo establecer el enfoque inicial preferiblemente en XML y se puede establecer en nada?

Respuestas:


159

Podrías usar la requestFocusetiqueta:

<Button ...>
  <requestFocus />
</Button>

Sin embargo, me parece extraño que enfoque automáticamente uno de sus botones, no he observado ese comportamiento en ninguna de mis vistas.


Sí, ha sucedido con dos de mis aplicaciones ahora. Supongo que podría solicitar Focus en un elemento que no cambia como un TextView o ¿no estaría permitido?
stealthcopter

1
@stealthcopter: ¿puedes decirme qué versión de Android estás usando? Estoy usando 2.1 y 2.2, pero requestFocus no funciona.
Anticafé

Bueno, lo he estado usando en todas las versiones, pero el problema que tenía parecía desaparecer por sí solo, así que no he investigado mucho.
stealthcopter

19
Probé el enfoque XML, probé el enfoque programático. Sin embargo, EditText conserva el enfoque. MUY MOLESTO !
Someone Somewhere


63

@Alguien en algún lugar, probé todo lo anterior sin éxito. La solución que encontré es de http://www.helloandroid.com/tutorials/remove-autofocus-edittext-android . Básicamente, necesitas crear un diseño invisible justo encima del botón problemático:

<LinearLayout android:focusable="true"
              android:focusableInTouchMode="true" 
              android:layout_width="0px"
              android:layout_height="0px" >
    <requestFocus />
</LinearLayout>

Pude enfocarme en un AlertDialog y habilitar el modo focusableintouch me ayudó a hacerlo bien. Básicamente, así es como: alert.show (); alert.getButton (AlertDialog.BUTTON_POSITIVE) .setFocusableInTouchMode (verdadero); alert.getButton (AlertDialog.BUTTON_NEGATIVE) .requestFocus ();
Sagar Hatekar

2
¡Gracias! Esta fue la única solución que funcionó en mi caso. Aunque lo usé un poco diferente; Puse el material de enfoque en un RelativeLayoutarchivo que contiene EditText.
kaka

1
Con Android P, los siguientes cambios están llegando a la plataforma: "Las vistas con 0 área (el ancho o la altura es 0) ya no se pueden enfocar. Además, las actividades ya no asignan implícitamente el enfoque inicial en el modo táctil. En cambio, está activo para que solicite explícitamente el enfoque inicial, si lo desea ".
AustrianDude

28

Establezca ambos :focusabley :focusableInTouchModeen verdadero y llame requestFocus. Hace el truco.


Sí, esta es la verdadera solución para solucionarlo. Gracias Anders
gokhansari

23

Encontré que esto funcionó mejor para mí.

En AndroidManifest.xml <activity> elementagregueandroid:windowSoftInputMode="stateHidden"

Esto siempre oculta el teclado al ingresar a la actividad.


¡Fácil y limpio!
SHADOW.NET

genial ... esto es muy impresionante!
gumuruh

11

Solo agrego esta línea de código en onCreate():

this.getWindow().setSoftInputMode(
    WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

Problema resuelto.


Funciona en Android 2.3.3.
Gaurav Agarwal

7

Use el código a continuación,

TableRow _tableRow =(TableRow)findViewById(R.id.tableRowMainBody);
tableRow.requestFocus();

eso debería funcionar.


3

@ Alguien en algún lugar utilicé esto para despejar el enfoque:

editText.clearFocus();

y ayuda


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.