Je joue avec un certain développement de clavier et j'essaie d'afficher une boîte de dialogue contextuelle lorsque une certaine touche est appuyée sur Toutefois, le problème est le "code> contexte code> partie. Dans une application normale, il serait juste d'être Android.View.windowManager $ BadTokenException:
Impossible d'ajouter une fenêtre - Token NULL est
pas pour une application p>
BlockQuote> Je me demande si je dois faire quelque chose avec InputConnection : P> L'interface d'entréeConnection est la
canal de communication d'un
INPUTMETHOD Retour à l'application
qui reçoit son entrée. Il est
utilisé pour effectuer des choses telles que la lecture
Texte autour du curseur, commettre
Texte dans la zone de texte et envoi de RAW
Événements clés à l'application. P>
BlockQuote> Jusqu'à présent, je n'ai pas pu comprendre comment. Je sais certainement que c'est possible, car je l'ai déjà vu auparavant. Je peux me signaler dans la bonne direction qui serait définitivement appréciée. P> Pour fournir une meilleure image de ce que j'essaie Pour atteindre, j'ai téléchargé une capture d'écran du clavier Swype, qui fait exactement que: Affiche une boîte de dialogue contextuelle lorsqu'une touche spéciale est enfoncée sur le clavier. p> P> p> ceci code>. J'ai aussi essayé
gettaplicationContextextextex () code> et
getbasecontext () code>, mais aucun de ces œuvres -> Crashs de clavier. P>
6 Réponses :
Vous devez avoir une référence à votre contexte d'activité. Quoi qu'il en soit, vous devez utiliser la méthode ShowDioriog de l'activité. P>
Deux problèmes: 1) Je développe une IMI (clavier), ce n'est donc pas mon activité 2) Comment puis-je obtenir la référence à l'activité actuelle? (C'est en fait ma question ci-dessus)
Une chose est sûre, vous ne pouvez afficher aucune boîte de dialogue de l'applicationContext. Pourquoi ne prenez-vous pas une référence de contexte dans votre constructeur de la vue?
Parce que c'est un service de clavier qui parle à n'importe quel champ de saisie de texte d'autres applications (pas my): développeur.android.com/reference/android/view/inputMethod/.../a>
@ZNQ Pouvez-vous m'aider à ouvrir la boîte de dialogue d'un service IME?
Un IME ne fonctionne pas dans un contexte d'application, vous ne pouvez donc pas utiliser Windows d'application normale. Vous pouvez utiliser une boîte de dialogue, mais vous devrez modifier sa fenêtre afin que le type de fenêtre soit ce type: P>
et définir la fenêtremanager.layoutParams.TenkSparams.token est le jeton de la fenêtre IME (via View.gewindowokokokokokoken ()). P>
Notez que la boîte de dialogue ne sera pas en mesure d'afficher des fenêtres contextuelles, car dans ce cas, il est lui-même efficace une fenêtre contextuelle. De plus, l'espace de coordonnées sera relatif à votre IMI, à moins que vous n'utilisiez les drapeaux de la fenêtre pour la modifier. P>
Merci de me pointer dans la bonne direction. En outre, en regardant le code source par défaut de l'Android, répondit toutes mes questions.
@hackbod j'ai essayé votre suggestion, mais cela ne fonctionne pas sur Android 9. Pouvez-vous consulter Stackoverflow.com/Questions/51906586/... ?
faire une activité et dans le fichier manifeste donne cette activité l'attribut
La paix soit sur ceux qui suivent les directives,
solution: p> bonne chance. p> p>
Si le clavier logiciel est ouvert et essayez d'ouvrir la boîte de dialogue d'alerte, l'affichage de la touche programmable dans la zone AlertDialog ne permet pas d'ajouter du texte à l'intérieur de la zone EditText de la zone ALTERTILOG
Tout d'abord, merci! Pour une raison quelconque, parfois après avoir appuyé sur le bouton positif, OnfinishInputView est en cours d'appel. Avez-vous une idée pourquoi?
Cela ne fonctionne plus pour moi. Quelqu'un peut-il m'aider s'il vous plaît à ouvrir la boîte de dialogue depuis un service IME? @Amitklein
Son très simple, il suffit de créer une activité comme ici (sans aucune vue), écrivez le code de dialogue de la boîte de dialogue aller au fichier manifeste Android et ajouter une activité comme, p > c'est tout, profitez p> p>
// 1. CREATE THE DIALOG val builder: AlertDialog.Builder = AlertDialog.Builder(this, R.style.Theme_AppCompat_Light) builder.setTitle("Title").setMessage("This is the message for the user. ") val mDialog = builder.create() // 2. SET THE IME WINDOW TOKEN ATTRIBUTE WITH THE TOKEN OF THE KEYBOARD VIEW mDialog.window?.attributes?.token = this.mTblView.windowToken // 3. SET THE TYPE OF THE DIALOG TO TYPE_APPLICATION_ATTACHED_DIALOG mDialog.window?.setType(WindowManager.LayoutParams.TYPE_APPLICATION_ATTACHED_DIALOG) // 4. SHOW THE DIALOG mDialog.show()