Comment définir le focus sur une vue quand une mise en page est créée et affichée?

Actuellement, j’ai un layout qui contient un Button , un TextView et un EditText . Lorsque la mise en page est affichée, le focus sera automatiquement placé sur le EditText , ce qui déclenchera l’ EditText du clavier sur le téléphone Android. Ce n’est pas ce que je veux. Est-il possible de définir le focus sur TextView ou sur rien quand une mise en page est affichée?

Définir le focus: le framework va gérer le focus mobile en réponse aux entrées de l’utilisateur. Pour forcer le focus sur une vue spécifique, appelez requestFocus ()

Cela marche:

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

Vous pouvez essayer de cacher le clavier. Quelque chose comme ça:

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

Ensemble

  android:focusable="true" 

dans votre

Pour définir le focus, retardez le requestFocus () à l’aide d’un gestionnaire.

 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(); } } ); } } 

Essayer

 comp.requestFocusInWindow(); 

Vous devriez append ceci:

 android:focusableInTouchMode="true" 

Aucune des réponses ci-dessus ne fonctionne pour moi. La seule solution (disons) a été de changer le premier TextView dans un EditText désactivé qui reçoit le focus, puis ajoute

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

dans le rappel onCreate pour empêcher l’ affichage du clavier. Maintenant, mon premier EditText ressemble à un TextView mais peut enfin obtenir le focus initial.

Définissez également ces lignes sur OnResume et assurez-vous que focusableInTouch est défini sur true pendant que vous initialisez vos contrôles

 .requestFocus(); .requestFocusFromTouch(); 

Je pense qu’une vue de texte n’est pas focalisable. Essayez de définir le focus sur un bouton par exemple ou de définir la propriété focusable sur true.

vous pouvez append un texte d’édition de taille “0 dip” en tant que premier contrôle dans ur xml, ce qui permettra de se concentrer sur le rendu.

La dernière suggestion est la solution correcte. Pour répéter, commencez par définir android:focusable="true" dans le fichier xml présentation, puis requestFocus() dans la vue de votre code.

Définissez android:focusable="true" dans le fichier XML de présentation, puis requestFocus() dans la vue de votre code

NON, ça ne marche pas ici.

Vous pouvez commencer par append android:windowSoftInputMode à votre activité dans le fichier AndroidManifest.xml .

  

Cela fera que le clavier ne sera pas EditText , mais EditText toujours le focus. Pour résoudre ce problème, vous pouvez définir android:focusableInTouchmode et android:focusable à true sur votre vue racine.

      

Le code ci-dessus s’assurera que RelativeLayout obtient le focus au lieu de EditText

pour changer le focus rendre le textView dans xml focusable

  

et en java en créer

textView.requestFocus();

ou simplement cacher le clavier

 public void hideKeyBoard(Activity act) { act.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN); InputMethodManager imm = (InputMethodManager) act.getSystemService(Context.INPUT_METHOD_SERVICE); } 

Le focus est la sélection des composants de l’interface utilisateur lorsque vous utilisez quelque chose en dehors du toucher (c.-à-d. Un d-pad, un clavier, etc.). Toute vue peut recevoir le focus, bien que certaines ne puissent pas être focalisées par défaut. (Vous pouvez créer une vue setFocusable(true) avec setFocusable(true) et la forcer à se concentrer avec requestFocus() .)

Cependant, il est important de noter que lorsque vous êtes en mode tactile, la mise au point est désactivée . Donc, si vous utilisez vos doigts, modifier le focus par programmation ne fait rien. L’exception à cette règle concerne les vues qui reçoivent des entrées d’un éditeur d’entrée. Un EditText est un exemple. Pour cette situation particulière, setFocusableInTouchMode(true) est utilisé pour permettre au clavier setFocusableInTouchMode(true) savoir où envoyer les données. Un EditText a ce paramètre par défaut. Le clavier logiciel apparaîtra automatiquement.

Si vous ne voulez pas que le clavier tactile apparaisse automatiquement, vous pouvez le supprimer temporairement comme indiqué par @abeljus:

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

Lorsqu’un utilisateur clique sur EditText il doit afficher le clavier.

Lectures complémentaires:

  • Avoir des problèmes de concentration? Une introduction à la mise au point sous Android
  • Blog des développeurs Android: Touch Mode