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?

helicóptero sigiloso
fuente

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.

Matías
fuente
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
4
<requestFocus /> está aquí: developer.android.com/guide/topics/resources/…
Erik B
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>
Vince Lasmarias
fuente
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.

Ruivo
fuente
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.

James
fuente
¡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.

Sam Tang
fuente
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.

jcw
fuente
3

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

editText.clearFocus();

y ayuda

Ruobin Wang
fuente
1
android:focusedByDefault="true"
TiyebM
fuente