L'affichage du clavier virtuel lorsque AlertDialog.Constructeur de l'objet est ouvert
Mon code pour l'ouverture d'une boîte de dialogue d'entrée se lit comme suit:
final AlertDialog.Builder alert = new AlertDialog.Builder(this);
alert.setTitle("Dialog Title");
alert.setMessage("Request information");
LayoutInflater factory = LayoutInflater.from(this);
final View textEntryView = factory.inflate(R.layout.edittextautotextlayout, null);
final EditText inputBox = (EditText) textEntryView.findViewById(R.id.my_et_layout);
alert.setView(inputBox);
Cela fonctionne très bien sauf que j'ai à taper la ligne de saisie de texte avant de le clavier virtuel s'affiche.
Suivant l'avis donné ici j'ai essayé d'insérer:
inputBox.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
alert.getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
}
}
});
mais Eclipse objets qui "la méthode getWindow() n'est pas défini pour le type AlertDialog.Builder".
Il semble que la setOnFocusChangeListener code fonctionne pour un AlertDialog objet, mais pas un AlertDialog.Générateur de rapports. Comment dois-je modifier mon code pour le clavier apparaissent automatcially.
Vous devez vous connecter pour publier un commentaire.
Aussi longtemps que vous avez toujours besoin d'afficher le clavier immédiatement une fois que la boîte de dialogue s'ouvre plutôt que d'une forme de widget à l'intérieur reçoit le focus (par exemple, si votre boîte de dialogue montre juste un
EditText
et un bouton), vous pouvez effectuer les opérations suivantes:Plutôt que d'appeler
.show()
sur votre constructeur immédiatement, vous pouvez appeler plutôt.create()
qui permet de faire du traitement supplémentaire avant de l'afficher sur l'écran.alert.show()
.EditText
. Des idées?C'est en réponse à miannelle.
La méthode suivante est appelée lorsqu'une option de menu est sélectionnée:
L'textentryalertdialog.xml fichier définit un linéaire de la mise en page contenant
TextView android:id="@+id/messagetext"
...
EditText android:id="@+id/my_edittext"
...
Bouton android:id="@+id/nommés okbutton"
...
Bouton android:id="@+id/CancelButton"
...
J'espère que cette aide.
Avec les encouragements de Mur Votema (voir sa réponse ci-dessus), j'ai répondu à ma question par la construction d'un dialogue personnalisé basé sur la classe de boîte de Dialogue. Contrairement à une alerte sur AlertDialog.Générateur d'un tel dialogue personnalisée accepte la getWindow().setSoftInputMode(...) de commande et permet donc à la douce clavier pour afficher automatiquement.
Pour des conseils sur la construction d'un dialogue personnalisé, j'ai trouvé cette page web et cette particulièrement utile.
essayez d'utiliser la vue
Si vous souhaitez pop-up boîte de dialogue avec la touche programmable de tampon, de sorte que l'utilisateur puisse les libérer à partir de, tapez sur modifier le texte à l'intérieur de boîte de dialogue pour afficher le clavier, par exemple si vous allez prendre un peu de valeur à partir de la boîte de dialogue, puis utiliser ce simple code, il permettra de résoudre votre problème.
essayez d'utiliser
inputBox
Avez-vous essayé de mettre l'accent sur votre EditText -> inputBox.requestFocus() ou quelque chose comme ça?
Je sais, cette Question est vraiment vieux, mais depuis que j'ai essayé environ 20 différents de soi-disant "solutions", je les poste, ce qui n'a travaillé que pour moi finalement.
Cette réponse est fondée sur la réponse de Pir Fahim Shah, qui m'a dirigé dans la bonne direction (Merci):
Assurez-vous que vous mettez dans le onCreate de votre activité, de sorte que forcé les claviers sont cachés, lorsque la boîte de dialogue est fermée:
puis créer une boîte de dialogue comme ceci:
Je pense que c'est presque ça qui travaillent dans votre question initiale. Essayez de créer un
final AlertDialog
appelergetWindow()
sur, par exemple,J'ai testé ce code et le clavier s'affiche désormais automatiquement sur la plupart de mes appareils, y compris:
Certains autres commentaires sur cette solution:
1) Vérifiez si vous avez quelque chose dans votre XML déjà à la demande de l'attention, comme qui peut arrêter ce code de travail (selon Ted dans la question, vous faites le lien).
2) Ce code ne semble pas fonctionner sur mon HTC G2 exécutant OS 2.3.4. Je suppose que c'est parce qu'il dispose d'un clavier physique, et peut-être le
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE
option ne fonctionne pas avec elle?J'ai aussi essayé SOFT_INPUT_STATE_VISIBLE (sans TOUJOURS), mais qui a arrêté le clavier apparaissant automatiquement.
3) Vous pouvez également ajouter le code de sorte que l'utilisateur peut appuyer sur le bouton ok sur le clavier pour soumettre les modifications, par exemple
- Je créer un
AlertDialog
et l'utilisation d'un affichage personnalisé qui contient unEditText
. Et je veux le clavier être affichés lorsque la boîte de dialogue apparaît et être caché si l'utilisateur clique sur le bouton OK ou quelque part à l'extérieur de la boîte de dialogue.Ce morceau de code est de
androidx.perference.PreferenceDialogFragmentCompat
et j'ai nettoyer un peu.Vous n'avez pas besoin de modifier Manifeste. Il se concentre automatiquement à la
EditText
et sera rejetée si vous cliquez sur boîte de dialogue des boutons d'action ou quelque part à l'extérieur de la boîte de dialogue.Hi Prepbgg il est en fait une alternative à ce que vous avez fait. J'ai effectivement eu à utiliser le mien dans mon ArrayAdapter. Ce que j'ai fait passer le contexte de l'activité dans le arrayadapter puis de l'appeler à l'accès getWindow() quelque chose comme ceci:
Dans l'extrait de code suivant, je montre comment accueillir un arbitraire
LinearLayout
dans unDialogFragment
. Une aideAlertDialog
(où le clavier ne fonctionne pas) et d'une autre manière sans l'aide deAlertDialog
(où le clavier ne fonctionne!):J'ai trouvé cette travaillé dans une boîte de Dialogue d'Alerte appelé à partir de différents endroits
Vous l'esprit, j'ai essayé beaucoup d'autres choses aussi. Paraît délicat.
.setView() affichera automatiquement le clavier dans une boîte de dialogue.
Notez le "final" sur le EditText lui-même. IMPORTANT!
Je pense que beaucoup de gens sont vraiment trop avec toutes les fonctions... C'est assez universel et de l'excellent travail. Et de ne pas gonfler votre code.