IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Ajouter deux listener à un EditText


Sujet :

Android

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2013
    Messages : 41
    Points : 39
    Points
    39
    Par défaut Ajouter deux listener à un EditText
    Bonjour, étant débutant en Android, je suis des petits Tuto. La j'essaye de faire un appli qui va retranscrire du texte html en texte normal. Je met des boutons pour mettre en gras, changer les couleurs ect tout marche.
    Par contre j'aimerais que lorsque je tape sur "Enter" dans mon Edit Text ça va enfaites taper <br />. Du coup j'ajoute mon OnkeyListener à mon EditText. Mais je voudrais aussi que dès que je tape un caractère, la prévisualisation se mettent à jour. Du coup j'ajoute un textListener à mon EditText. Mais j'ai l'impression qu'il aime pas trop ça avoir deux listener, parce du coup il ne veut plus écrire les lettres que je tape, il prend juste comme touche le Enter.

    Voici le code, ça sera peut-être plus facile à comprendre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
      private TextListener editerListener;
        private KeyListener keyListener;
     
     
        public void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
     
            slider= (Slider) findViewById(R.id.slider);
            toHide=(RelativeLayout) findViewById(R.id.toHide);
            slider.setToHide(toHide);
     
            cacherListener= new CacherListener();
            styleListener= new StyleListener();
            couleurListener = new CouleurListener();
            editerListener = new TextListener();
            keyListener = new KeyListener();
     
            cacher=(Button) findViewById(R.id.cacher);
            cacher.setOnClickListener(cacherListener);
     
            gras = (Button) findViewById(R.id.bGras);
            gras.setOnClickListener(styleListener);
     
            italique = (Button) findViewById(R.id.bItal);
            italique.setOnClickListener(styleListener);
     
            souligne = (Button) findViewById(R.id.bSoul);
            souligne.setOnClickListener(styleListener);
     
            couleur = (RadioGroup) findViewById(R.id.couleur);
            couleur.setOnCheckedChangeListener(couleurListener);        
     
            editer=(EditText) findViewById(R.id.editer);
            editer.setOnKeyListener(keyListener);
            editer.addTextChangedListener(editerListener);
     
            text = (TextView) findViewById(R.id.text);
        }
     
    ....
    private class TextListener implements  TextWatcher {
     
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }
     
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                text.setText(Html.fromHtml("<font color =\""+currentColor+"\">"+editer.getText().toString()));
                 Toast toast = Toast.makeText(getApplicationContext(), "text", Toast.LENGTH_LONG);
                toast.show();
            }
     
            public void afterTextChanged(Editable s) {
            }        
        };
     
        private class KeyListener implements View.OnKeyListener{
     
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                int start = editer.getSelectionStart();
     
                Toast toast = Toast.makeText(getApplicationContext(), "ok", Toast.LENGTH_LONG);
                toast.show();
                if(event.getAction()==0)
                    if(keyCode==66)
                        editer.getText().insert(start, "<br />");
     
                return true;
            }
        };    
    }
    Merci pour votre aide

  2. #2
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        private class KeyListener implements View.OnKeyListener{
     
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                int start = editer.getSelectionStart();
     
                Toast toast = Toast.makeText(getApplicationContext(), "ok", Toast.LENGTH_LONG);
                toast.show();
                if(event.getAction()==0 && keyCode == 66) {
                        editer.getText().insert(start, "<br />"); 
                        return true;
                } else 
                        return false;
            }
        };

    Devrait fonctionner.

    Le booléen que tu retournes est pour dire "est-ce que j'ai consommé l'événement ?" Si oui, il ne passe pas aux suivants, si non, il remonte la chaîne jusqu'à ce que quelqu'un le consomme.
    Dans ton cas, tu faisais un traitement si tu avais action_down ET touche entrée, rien sinon.
    Ensuite, tu retournais systématiquement que l'événement était consommé, ne le laissant pas remonter.

    Je te suggère très fortement, par contre, de faire des tests avec les constantes, et pas avec leurs valeurs.
    66 correspond à priori à la touche entrée de ton clavier... mais rien n'indique que ce sera partout le cas. De même que 0 indique action_down, rien n'indique que ce sera toujours 0.
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2013
    Messages : 41
    Points : 39
    Points
    39
    Par défaut
    Ah oui maintenant ça fonctionne bien sur l'émulateur, par contre je l'ai test sur mon smartphone et la il prend pas les touches. J'ai mis le Toast dès qu'on appuie sur une touche du clavier. Sur l'ordi ça fonctionne nickel mais sur le smartphone il ne met plus le < br/> et n'affiche pas le toast. Et vu que le but est quand même de faire des applications pour smartphone et pas émulateur ^^
    Voilà ce que j'ai changé dans le code
    Et merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    private class KeyListener implements View.OnKeyListener{
     
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                int start = editer.getSelectionStart();
     
                Toast toast = Toast.makeText(getApplicationContext(), "ok", Toast.LENGTH_LONG);
                toast.show();
                if(event.getAction()==KeyEvent.ACTION_DOWN && keyCode==KeyEvent.KEYCODE_ENTER){
                        editer.getText().insert(start, "<br />");
                        return true;
                 }
                else
                    return false;
            }

Discussions similaires

  1. ajouter deux fonctions a un script qui liste un dossier
    Par abdellah63 dans le forum Langage
    Réponses: 1
    Dernier message: 19/06/2007, 22h16
  2. Comment ajouter un listener dans un JTable
    Par @yoyo dans le forum Composants
    Réponses: 5
    Dernier message: 09/05/2007, 14h01
  3. ajouter deux champs..de formulaire
    Par Chronax dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 03/03/2006, 12h15
  4. Ajouter un listener sur une variable
    Par serwol dans le forum Général Java
    Réponses: 4
    Dernier message: 14/10/2005, 15h39
  5. [Tomcat] Ajout de listener
    Par Pwill dans le forum Tomcat et TomEE
    Réponses: 9
    Dernier message: 11/07/2005, 13h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo