6
votes

Dans editext, contemplez une boîte de dialogue lorsque vous cliquez sur le sous-ensemble spécifique du texte

trouvé deux solutions - voir la réponse sélectionnée forte>

Lorsque l'utilisateur clique sur une certaine région d'un EditText, je souhaite contempler une boîte de dialogue. J'ai utilisé OnClick pour capturer le clic. Cela fonctionne partiellement: la première fois que l'utilisateur tapote l'editext, le clavier logiciel apparaît et la boîte de dialogue ne le fait pas. Les robinets ultérieurs apportent le clavier, puis la boîte de dialogue (et le clavier disparaît). P>

Je soupçonne que cela a quelque chose à voir avec l'editext gagnant la mise au point. P>

Voici un code Snip:

setInputType (InputType.TYPE_NULL);


0 commentaires

5 Réponses :


3
votes

Peut-être peut-être que cela peut fonctionner xxx

ou u peut utiliser e.hasfocus (); puis utiliser e.setfocusable (false); < / Code> Pour le rendre Écuste

/////////////// mon code xxx


8 commentaires

Pourriez-vous fournir un peu de perspicacité quant à ce que vous pensez? Merci.


Initialement défini Focus False par E.SetFocusable (FALSE) et dans ONCLICK Fonction le rendent concentrée après avoir montré le dialogue, alors PopUp ira ASE COMMANDEZ-VOUS APPECTER.


Pas de différence significative. Il échoue toujours la première fois et apparaît le clavier sur des robinets ultérieurs. Je mettez les appels setfocusables immédiatement autour de l'appel qui crée la boîte de dialogue.


que de faire de l'entréeType NULL, le clavier n'apparaîtra pas, après le clic régler l'entréeTYPE


Même comportement. Pour être clair, je régle le type d'entrée Retour à Type_Class_text immédiatement après le démarrage de la boîte de dialogue. Peut-être trop tôt, mais pas sûr de l'endroit où le régler.


J'écris ce code et ça marche bien, j'écris juste avant de rejeter la fonction appelée. désolé ça ne vous aide pas


Laissez-nous Continuer cette discussion en chat


Merci pour vos suggestions, ce qui m'a aidé à déterminer une solution de travail. Upvote pour vous.



2
votes

Essayez Changer de capture Cliquez par OnCliquez sur ONCLICK

    this.editText.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_DOWN) {
                                //dialogue popup
            }
            return false;
        }
    });


2 commentaires

Essayé cela. Il serait peut-être possible de faire quelque chose avec AOUTTOUD, mais cela semble très difficile. Faire ce que vous suggérez des pauses GetSelectionStart - Je suis plutôt certain d'Aoudouch avant que la position du curseur ne soit définie.


Merci pour vos suggestions, ce qui m'a aidé à déterminer une solution de travail. Upvote pour vous.



1
votes

Essayez ceci si cela peut vous aider à vous aider à U.First Time, l'EditText se comportera en tant qu'EitTtext normal et à condition que vous puissiez afficher la boîte de dialogue selon vos besoins

 EditText editText;
mTim_edittext.setOnFocusChangeListener(new OnFocusChangeListener() {

      public void onFocusChange(View v, boolean hasFocus) {

     if(!hasFocus){

    //statement


 if(condition){

AlertDialog diaBox = Utils.showErrorDialogBox(  "Term in Months Cannot be 0", context);                             
diaBox.show();
              }


            }
        }
    });


1 commentaires

Merci pour vos suggestions, ce qui m'a aidé à déterminer une solution de travail. Upvote pour vous.



1
votes

Après de nombreuses expériences, voici deux solutions de travail! Je les ai testé sur mes deux appareils - Nexus 7 en cours d'exécution 4.2.1, Kyocera C5170 runing 4.0.4. Ma préférence est la solution 2.

solution 1

Pour le premier, l'astuce consistait à déterminer la position du curseur à Aoudouch au lieu d'OnClick, avant que EditText ait une chance de faire C'est le travail - particulièrement avant qu'il ne puisse monter le clavier.

Un commentaire supplémentaire: assurez-vous de définir Android: WindowsoftInputMode = "StateHidden" dans votre manifeste pour la popup, ou vous obtiendrez le clavier avec le popup.

voici l'ensemble du code: xxx

solution 2

Celui-ci est en fait plus simple Et je pense, c'est mieux - moins d'effets secondaires.

Ici, l'astuce consiste à laisser EditTtext faire tout son traitement de clic, puis remplacez-la de manière asynchrone. Le gist est: attendre que le toucher "laisse go" - motionEvent.action_up - puis au lieu de faire votre action à ce moment-là, postez une file d'attente d'événement et faites votre action là-bas.

Le tout Code: xxx


0 commentaires

0
votes

Utilisez ceci ci-dessous Code Snippet

this.editText.setOnTouchListener(new OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_DOWN) {
                                //dialogue popup
            }
            return false;
        }
    });


0 commentaires