Actuellement, j'ai une mise en page qui contient un Button
, un TextView
et un EditText
. Lorsque la mise en page est affichée, le focus est automatiquement placé sur le EditText
, ce qui déclenche l'affichage du clavier sur le téléphone Android. Ce n'est pas ce que je veux. y-a-t-il moyen de mettre le focus sur TextView
ou sur rien lorsqu'une mise en page est affichée?
Définir le focus: Le framework gérera le déplacement du focus en réponse aux commentaires 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);
Pour définir le focus, retardez 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();
}
}
);
}
}
Vous devriez ajouter ceci:
Android:focusableInTouchMode="true"
Ensemble
Android:focusable="true"
dans votre <EditText/>
Essayer
comp.requestFocusInWindow();
Définissez également ces lignes sur OnResume
et assurez-vous que si focusableInTouch
est défini sur true lors de l'initialisation de vos contrôles
<controlName>.requestFocus();
<controlName>.requestFocusFromTouch();
changer le focus rendre le textView in xml focusable
<TextView
**Android:focusable="true"**
Android:id="@+id/tv_id"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"/>
et dans Java dans le 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);
}
Aucune des réponses ci-dessus ne fonctionne pour moi. La seule solution (disons) a été de changer le premier TextView dans un désactivé EditText qui reçoit le focus et ensuite ajouter
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
dans le onCreate callback pour empêcher l'affichage du clavier. Maintenant, mon premier EditText ressemble à un TextView mais peut enfin avoir le focus initial.
La dernière suggestion est la bonne solution. Juste pour répéter, commencez par définir Android:focusable="true"
Dans le fichier de présentation xml
, puis par requestFocus()
sur la vue dans votre code.
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 commencer par ajouter Android:windowSoftInputMode
à votre activité dans AndroidManifest.xml
fichier.
<activity Android:name="YourActivity"
Android:windowSoftInputMode="stateHidden" />
Cela fera que le clavier ne se montrera pas, mais EditText
sera toujours actif. Pour résoudre ce problème, vous pouvez définir Android:focusableInTouchmode
et Android:focusable
to true
sur votre vue racine.
<LinearLayout Android:orientation="vertical"
Android:focusable="true"
Android:focusableInTouchMode="true"
...
>
<EditText
...
/>
<TextView
...
/>
<Button
...
/>
</LinearLayout>
Le code ci-dessus vous assurera que RelativeLayout
obtient le focus au lieu de EditText
Définissez Android:focusable="true"
Dans le fichier XML de mise en page, puis requestFocus()
dans l'affichage dans votre code
NON, ça ne marche pas ici.
vous pouvez ajouter un texte d'édition de taille "0 dip" en tant que premier contrôle de votre code xml, donc, le rendu sera actif (assurez-vous que sa mise au point et tout le reste ...)
Le focus sert à sélectionner des composants de l'interface utilisateur lorsque vous utilisez autre chose que le toucher (par exemple, un pavé tactile, un clavier, etc.). Toute vue peut recevoir le focus, même si certains ne le sont pas par défaut. (Vous pouvez rendre une vue mise au point avec setFocusable(true)
et la forcer à la mettre au point 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, changer la mise au point par programmation ne fait rien. L'exception à cette règle concerne les vues qui reçoivent une entrée d'un éditeur d'entrée. Un EditText
en est un exemple. Pour cette situation particulière, setFocusableInTouchMode(true)
permet au clavier logiciel de 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 logiciel apparaisse automatiquement, vous pouvez le supprimer temporairement comme @abeljus l’a noté:
InputMethodManager inputManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
Lorsqu'un utilisateur clique sur EditText
, il doit quand même afficher le clavier.