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.