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 :

OnTouchListener : Afficher le clavier


Sujet :

Android

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 144
    Points : 118
    Points
    118
    Par défaut OnTouchListener : Afficher le clavier
    Bonjour,

    Je souhaiterais faire afficher le clavier lorsqu'on appui sur une zone de texte, mais je n'y arrive pas totalement. Pourtant, le code me semble correct.

    J'utilise bien un OnTouchListener sur la zone de texte, et celui-ci fonctionne (il affiche un Toast).
    Pour afficher le clavier, j'utilise les lignes ci-dessous, et elles marchent très bien dans un OnFocusChangeListener, mais pas dans le OnTouchListener.

    Autres précisions :
    - Le clavier s'affiche tout seul lorsque je clique sur une autre zone de texte, dans un alertDialog (puis le clavier se masque lorsque l'alertDialog se termine).
    - J'ai essayé d'afficher le clavier (via ces deux lignes) lors d'appui sur un bouton, ça ne marche pas non plus...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    final InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    // Affiche le Toast mais n'affiche pas le clavier
            textview.setOnTouchListener(new OnTouchListener()
    		{	
    			public boolean onTouch(View v, MotionEvent event)
    			{
    				if (v == textview)
    				{
    					mgr.showSoftInput(v, InputMethodManager.SHOW_IMPLICIT);
    					Toast.makeText(getApplicationContext(), "touch", 1).show();
    				}
     
    				return false;
    			}
    		});
    Les deux éléments (le listenner, et le code pour afficher le clavier) fonctionnent, mais ensemble, pour une raison que j'ignore, ça ne veux pas marcher.

    Y-a-t'il une erreur dans mon code ?
    Ou sinon, existe-t'il une autre méthode ?


    Merci d'avance.

  2. #2
    Inscrit

    Profil pro
    Inscrit en
    Février 2008
    Messages
    658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 658
    Points : 892
    Points
    892
    Par défaut
    C'est une mauvaise habitude à forcer le clavier à se montrer ou cacher mais neammoins voici les deux methodes :

    Voici les deux methodes pour forcer le clavier à se montrer à cacher mais si ca peut t'aider voici la solution.

    Cacher :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    	/**
             * Force to hide keyboard
             * @param activity : Activity
             */
    	public static void hideKeyBoard(Activity activity) {
    		InputMethodManager imm = (InputMethodManager) activity
    				.getSystemService(Context.INPUT_METHOD_SERVICE);
    		imm.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(),
    				0);
    	}
    Montrer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    /**
             * Force to show current KeyBoard
             * 
             * @param activity : current Activity
             */
    	public static void showKeyBoard(Activity activity) {
    		InputMethodManager imm = (InputMethodManager) activity
    				.getSystemService(Context.INPUT_METHOD_SERVICE);
    		imm.showSoftInput(activity.getCurrentFocus(),
    				InputMethodManager.SHOW_FORCED);
    }

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 168
    Points : 212
    Points
    212
    Par défaut
    A la base, quand on clique sur un champ texte, le clavier s'affiche tout seul non ?

  4. #4
    Inscrit

    Profil pro
    Inscrit en
    Février 2008
    Messages
    658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 658
    Points : 892
    Points
    892
    Par défaut
    Il faut eviter ce genre de comparaison quand tu travaille avec les object non-null

    C'est une très mauvaise habitude de comparaison en terme d'objet

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 144
    Points : 118
    Points
    118
    Par défaut
    Justement, pour une raison que je ne connais pas, la zone de texte de cette activitée ne lance pas automatiquement le clavier...
    Et pourtant, le clavier s'affiche/se masque automatiquement sur une zone de texte (d'une alertDialog) d'une autre activitée.

    Je suis bien d'accord que ça peut être une mauvaise habitude de forcer, mais il vaut mieux "l'afficher en trop" pour les téléphones ayant un vrai clavier, que de bloquer ceux qui n'ont pas de clavier.


    Au passage, merci jahbromo pour tes lignes de codes (ce n'était pas vraiment le problème par contre, car j'avais déjà le code pour afficher/masquer, mais légèrement différent).

    En retirant le "<requestFocus />" dans l'EditText (fichier .xml), mon code fonctionne.
    Mais ça reste étrange... Le requestFocus est aussi dans le xml de mon autre activitée et porutant ça marche très bien (tellement bien que ça se fait automatiquement).

    A n'y rien comprendre...
    J'aimerais quand même éviter de forcer, mais je ne vois pas comment ?

    ---------------

    Citation Envoyé par jahbromo Voir le message
    Il faut eviter ce genre de comparaison quand tu travaille avec les object non-null

    C'est une très mauvaise habitude de comparaison en terme d'objet
    Utiliser plutôt v.equals(textview) ?

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 168
    Points : 212
    Points
    212
    Par défaut
    Comme l'a précisé jahbromo,

    Au lieu de :

    Vaut mieux utiliser


  7. #7
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 144
    Points : 118
    Points
    118
    Par défaut
    Oui, c'est ce que j'ai proposé juste au dessus (2 minutes avant ^^).
    C'est vrai que c'est une mauvaise habitude, je connais pourtant très bien la méthode equals.

    Sinon, vous n'avez pas d'idées, qu'est-ce qui peut empêcher le clavier de s'afficher automatiquement ? (Sachant qu'il s'affiche très bien dans une autre activité, la zone de texte étant dans une alertdialog)


    Justement, pour une raison que je ne connais pas, la zone de texte de cette activitée ne lance pas automatiquement le clavier...
    Et pourtant, le clavier s'affiche/se masque automatiquement sur une zone de texte (d'une alertDialog) d'une autre activitée.

    Je suis bien d'accord que ça peut être une mauvaise habitude de forcer, mais il vaut mieux "l'afficher en trop" pour les téléphones ayant un vrai clavier, que de bloquer ceux qui n'ont pas de clavier.


    Au passage, merci jahbromo pour tes lignes de codes (ce n'était pas vraiment le problème par contre, car j'avais déjà le code pour afficher/masquer, mais légèrement différent).

    En retirant le "<requestFocus />" dans l'EditText (fichier .xml), mon code fonctionne.
    Mais ça reste étrange... Le requestFocus est aussi dans le xml de mon autre activitée et porutant ça marche très bien (tellement bien que ça se fait automatiquement).

    A n'y rien comprendre...
    J'aimerais quand même éviter de forcer, mais je ne vois pas comment ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 20/07/2011, 09h27
  2. Afficher le clavier numerique
    Par lolo81 dans le forum Windows Mobile
    Réponses: 0
    Dernier message: 15/05/2011, 21h37
  3. Réponses: 2
    Dernier message: 26/04/2010, 12h11
  4. Réponses: 3
    Dernier message: 24/02/2008, 16h57
  5. Comment afficher le clavier visuel ?
    Par crossrobotik dans le forum MFC
    Réponses: 1
    Dernier message: 30/01/2007, 15h38

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