¿Cómo establecer el enfoque en una vista cuando se crea y se muestra un diseño?

Actualmente, tengo un diseño que contiene un Button , un TextView y un EditText . Cuando se muestre el diseño, el enfoque se pondrá automáticamente en el EditText , lo que provocará que el teclado aparezca en el teléfono Android. No es lo que quiero. ¿Hay alguna manera que puedo fijar el foco en TextView o en nada cuando una disposición se exhibe?

Fijar el foco: El marco manejará el foco móvil en respuesta a la entrada del usuario. Para forzar el enfoque a una vista específica, llama a requestFocus ()

Esto funciona:

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

Usted puede intentar apenas hidding el teclado. Algo como esto:

 InputMethodManager inputManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE); inputManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); 

Conjunto

  android:focusable="true" 

En su <EditText/>

Usted debe agregar esto:

 android:focusableInTouchMode="true" 

Tratar

 comp.requestFocusInWindow(); 

Para configurar el enfoque, retrasar el requestFocus () utilizando un Handler.

 private Handler mHandler= new Handler(); public class HelloAndroid extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); LinearLayout mainVw = (LinearLayout) findViewById(R.id.main_layout); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); EditText edit = new EditText(this); edit.setLayoutParams(params); mainVw.addView(edit); TextView titleTv = new TextView(this); titleTv.setText("test"); titleTv.setLayoutParams(params); mainVw.addView(titleTv); mHandler.post( new Runnable() { public void run() { titleTv.requestFocus(); } } ); } } 

Ninguna de las respuestas anteriores funciona para mí. La única solución (digamos) ha sido cambiar el primer TextView en un EditText deshabilitado que recibe el foco y luego agregar

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

En la devolución de llamada onCreate para evitar que se muestre el teclado. Ahora mi primer EditText se ve como un TextView, pero puede obtener el enfoque inicial, por último.

Establezca android:focusable="true" en el archivo xml de diseño, luego requestFocus() en la vista en su código

NO, no funciona aquí.

Establezca estas líneas en OnResume y asegúrese de que si focusableInTouch está establecido en true mientras inicializa los controles

 <controlName>.requestFocus(); <controlName>.requestFocusFromTouch(); 

Creo que una vista de texto no se puede enfocar. Intente establecer el enfoque en un botón, por ejemplo, o para establecer la propiedad que se puede enfocar a true.

Usted puede agregar un texto de edición de tamaño "0 dip" como el primer control en ur xml, por lo que, obtendrá el foco en render (asegúrese de que su focusable y todos …)

La última sugerencia es la solución correcta. Sólo para repetir, primero establezca android:focusable="true" en el archivo xml diseño, luego requestFocus() en la vista en su código.

Puedes empezar agregando android:windowSoftInputMode a tu actividad en el archivo AndroidManifest.xml .

 <activity android:name="YourActivity" android:windowSoftInputMode="stateHidden" /> 

Esto hará que el teclado no se muestre, pero EditText todavía tiene foco. Para solucionarlo, puedes configurar android:focusableInTouchmode y android:focusable a true en tu vista raíz.

 <LinearLayout android:orientation="vertical" android:focusable="true" android:focusableInTouchMode="true" ... > <EditText ... /> <TextView ... /> <Button ... /> </LinearLayout> 

El código anterior se asegurará de que RelativeLayout está obteniendo el foco en lugar de EditText

El enfoque es para seleccionar componentes de interfaz de usuario cuando está utilizando algo aparte del toque (es decir, un pad d, un teclado, etc.). Cualquier vista puede recibir el enfoque, aunque algunas no se pueden enfocar de forma predeterminada. (Puede hacer que una vista se pueda enfocar con setFocusable(true) y obligarla a centrarse con requestFocus() .)

Sin embargo, es importante tener en cuenta que cuando se está en modo táctil, se desactiva el enfoque . Así que si estás usando tus dedos, cambiar el enfoque programáticamente no hace nada. La excepción a esto es para las vistas que reciben entrada de un editor de entrada. Un EditText es un ejemplo. Para esta situación especial setFocusableInTouchMode(true) se utiliza para dejar que el teclado virtual sabe dónde enviar entrada. Un EditText tiene esta configuración de forma predeterminada. El teclado virtual aparecerá automáticamente.

Si no desea que el teclado virtual aparezca automáticamente, entonces puede suprimirlo temporalmente como @abeljus anotó:

 InputMethodManager inputManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE); inputManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); 

Cuando se utiliza un clic en el EditText debe mostrar el teclado, sin embargo.

Otras lecturas:

  • ¿Tiene problemas para enfocarse? Una introducción sobre el enfoque en Android
  • Blog de Desarrolladores de Android: Touch Mode
  • ¿Cómo capturar perfectamente la Java NullPointerException en la operación o = objectA.objectB.objectC?
  • Analizar la clase anónima no implementa método abstracto
  • Firebase: ¿una forma limpia de usar campos enum en Kotlin / Java?
  • Android JUnit Pruebas no se ejecutan
  • En Java / Eclipse, ¿por qué establecer un punto de interrupción en mi código altera el efecto de esa sentencia?
  • Clase MediaPlayer personalizada en android
  • Array Lista de objetos por intención
  • Android FragmentTransaction setTransitionStyle
  • ¿Cómo cambiar el color del texto y la flecha en la barra de herramientas?
  • ¿Cómo se utiliza un OnClickListener en una vista de reciclador?
  • Sqlite Database - ¿Cómo guardar la imagen tomada de la intención de la cámara, así como hashmap a sqlite para recuperar más tarde?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.