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 :

changer le texte d'un TextView en fonction de l'image de fond d'un ImageButton


Sujet :

Android

  1. #1
    Membre actif Avatar de stracoma
    Homme Profil pro
    Médecin
    Inscrit en
    Août 2013
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Maroc

    Informations professionnelles :
    Activité : Médecin

    Informations forums :
    Inscription : Août 2013
    Messages : 413
    Points : 229
    Points
    229
    Par défaut changer le texte d'un TextView en fonction de l'image de fond d'un ImageButton
    Bonjour.
    Je vous sollicite pour résoudre un problème auquel je ne trouve pas de solution même après avoir 'googlé' maintes fois.
    J'ai créé un projet fait d'une seule Activity, contenant 2 boutons, un ImageButton et un TextView.
    L'mage de fond de ImageButton change quant je clique sur un bouton ou sur l'autre (image "Garçon" ou "Fille"). Là pas de problème.
    Fichier XML:
    Code XML : 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
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        tools:context=".MainActivity">
     
       <Button
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:background="#aa2536"
           android:layout_marginTop="40dp"
           android:text="Garçon"
           android:textColor="#FFFFFF"
           android:textStyle="bold"
           android:textSize="25dp"
           android:id="@+id/btnGarcon">
     
       </Button>
     
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="#aa2536"
            android:layout_marginTop="20dp"
            android:textColor="#FFFFFF"
            android:textStyle="bold"
            android:textSize="25dp"
            android:text="Fille"
            android:id="@+id/btnFille">
     
        </Button>
     
        <ImageButton
            android:id="@+id/btnImage"
            android:layout_width="222dp"
            android:layout_height="222dp"
            android:layout_gravity="center"
            android:layout_marginTop="20dp"
            >
     
        </ImageButton>
     
        <TextView
            android:id="@+id/lblNom"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textSize="25dp"
            android:hint="Nom"
            android:gravity="center">
     
        </TextView>
     
    </LinearLayout>

    Fichier kt:
    Code kotlin : 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
    package com.stracoma.boutonimage
     
    import androidx.appcompat.app.AppCompatActivity
    import android.os.Bundle
    import kotlinx.android.synthetic.main.activity_main.*
     
    class MainActivity : AppCompatActivity() {
     
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
            btnGarcon.setOnClickListener {
                btnImage.setBackgroundResource(R.drawable.garcon)
            }
            btnFille.setOnClickListener {
                btnImage.setBackgroundResource(R.drawable.fille)
            }
        }
    }
    Mon problème est que je veux avoir lblNom.text="Fille" quand je clique sur l'ImageButton avec image de fond ="fille" et avoir lblNom.text="Garçon" quant je clique sur l'ImageButton avec image de fond ="garcon"
    je ne veux pas cette solution:
    Code kotlin : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    class MainActivity : AppCompatActivity() {
     
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
            btnGarcon.setOnClickListener {
                btnImage.setBackgroundResource(R.drawable.garcon)
                lblNom.text="Garçon"
            }
            btnFille.setOnClickListener {
                btnImage.setBackgroundResource(R.drawable.fille)
                lblNom.text="Fille"
            }
        }
    }
    je veux changer lblNom.text par le biais de btnImage.setOnClickListener().

    Merci
    J'apprends la programmation pour le plaisir

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    475
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 475
    Points : 587
    Points
    587
    Par défaut
    Salut,

    Je n'ai pas la procédure exacte en tête, mais normalement tu peux récupérer la resource de ton imagebutton, et ainsi afficher le texte voulu sur le onclicklistener.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Drawable sexeImage =  btnImage.getBackground()
    Mais le plus simple à mon avis serait d'utiliser le tag à ton imagebutton et de chercker ce tag plutot que de travailler avec le drawable.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     btnGarcon.setOnClickListener {
                btnImage.setBackgroundResource(R.drawable.garcon)
                btnImage.setTag("garcon")
            }
            btnFille.setOnClickListener {
                btnImage.setBackgroundResource(R.drawable.fille)
                btnImage.setTag("fille")
            }
    et dans ton btnImage.setOnClickListener, mettre une condition sur btnImage.getTag()

  3. #3
    Membre actif Avatar de stracoma
    Homme Profil pro
    Médecin
    Inscrit en
    Août 2013
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Maroc

    Informations professionnelles :
    Activité : Médecin

    Informations forums :
    Inscription : Août 2013
    Messages : 413
    Points : 229
    Points
    229
    Par défaut
    Merci pour la réponse.
    ça marche avec l'utilisation du tag. mais dans ce cas on utilise une variable intermédiaire, c'est comme si je fais:
    Code kotlin : 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
     override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
            var temp=""
            btnGarcon.setOnClickListener {
                btnImage.setBackgroundResource(R.drawable.garcon)
               temp="garcon"
            }
            btnFille.setOnClickListener {
                btnImage.setBackgroundResource(R.drawable.fille)
                temp="fille"
            }
            btnImage.setOnClickListener(){
                if (temp=="garcon") lblNom.text="garçon"
                if(temp=="fille") lblNom.text="fille"
            }
        }
    moi j'ai besoin de savoir comment comparer les Background:
    Code kotlin : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    btnImage.setOnClickListener(){
               if(btnImage.getBackground()== ???????? )
            }
    J'apprends la programmation pour le plaisir

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    475
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 475
    Points : 587
    Points
    587
    Par défaut
    ça marche avec l'utilisation du tag. mais dans ce cas on utilise une variable intermédiaire
    Ben justement non, c'est un paramètre de l'imageButton, comme ses dimensions, positions, id...

    moi j'ai besoin de savoir comment comparer les Background
    Moi non plus, j'évite généralement les comparaison d'image.

    J'ai trouvé ca https://developer.android.com/guide/...drawables#java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Resources res = context.getResources();
    Drawable myImage = ResourcesCompat.getDrawable(res, R.drawable.garcon, null);
    Je ne sais pas si ca peut marcher, mais sinon tu compares myImage avec le background de btnImage qui sont tous les 2 des drawables.

  5. #5
    Membre actif Avatar de stracoma
    Homme Profil pro
    Médecin
    Inscrit en
    Août 2013
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Maroc

    Informations professionnelles :
    Activité : Médecin

    Informations forums :
    Inscription : Août 2013
    Messages : 413
    Points : 229
    Points
    229
    Par défaut
    Bonsoir
    Effectivement ça marche avec ta dernière proposition.

    Code kotlin : 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
    class MainActivity : AppCompatActivity() {
     
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
            val imgFille: Drawable? = ResourcesCompat.getDrawable(this.resources, R.drawable.fille, null)
            val imgGarcon: Drawable? = ResourcesCompat.getDrawable(this.resources, R.drawable.garcon, null)
            btnGarcon.setOnClickListener {
                btnImage.background = imgGarcon
            }
            btnFille.setOnClickListener {
                btnImage.background = imgFille
            }
            btnImage.setOnClickListener() {
                if (btnImage.background == imgFille) {
                        lblNom.text = "fille"
                    }
                if (btnImage.background == imgGarcon) {
                        lblNom.text = "garçon"
                    }
                }
            }
    }

    Mais comme tu avais dit dans ton premier post, le tag est efficace et beaucoup plus simple
    mais reste une chose que je n'arrive pas à comprendre, dans le btnImage.setOnClickListener(), quand je remplace imgGarcon par sa valeur, ça ne marche pas:

    Code kotlin : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     btnImage.setOnClickListener() {
                if (btnImage.background == ResourcesCompat.getDrawable(this.resources, R.drawable.fille, null)) {
                        lblNom.text = "fille"
                    }
                if (btnImage.background == ResourcesCompat.getDrawable(this.resources, R.drawable.garcon, null)) {
                        lblNom.text = "garçon"
                    }
                }
    J'apprends la programmation pour le plaisir

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    475
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 475
    Points : 587
    Points
    587
    Par défaut
    mais reste une chose que je n'arrive pas à comprendre, dans le btnImage.setOnClickListener(), quand je remplace imgGarcon par sa valeur, ça ne marche pas:
    Parce que comme expliqué dans la doc https://docs.oracle.com/javase/tutor...O/thiskey.html, this réfère à l'instance courante d'un objet. Et this au sein du listener ne fait pas référence à l'activité mais au listener. Tu peut le vérifier en mode debug. Pour que ca marche, il faudrait changer this en MainActivity.this.

  7. #7
    Membre actif Avatar de stracoma
    Homme Profil pro
    Médecin
    Inscrit en
    Août 2013
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Maroc

    Informations professionnelles :
    Activité : Médecin

    Informations forums :
    Inscription : Août 2013
    Messages : 413
    Points : 229
    Points
    229
    Par défaut
    Bonsoir
    Citation Envoyé par Turvy Voir le message
    il faudrait changer this en MainActivity.this.
    Code kotlin : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    btnImage.setOnClickListener() {
                if (btnImage.background == ResourcesCompat.getDrawable( MainActivity.this.resources, R.drawable.fille, null)) {
                    lblNom.text = "fille"
                }
                if (btnImage.background == ResourcesCompat.getDrawable( MainActivity.this.resources, R.drawable.garcon, null)) {
                    lblNom.text = "garçon"
                }
    dans ce code j'ai une erreur, this est souligné en rouge. et IDE me dit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    e: /home/jonass/AndroidStudioProjects/BoutonImage/app/src/main/java/com/stracoma/boutonimage/MainActivity.kt: (25, 82): The expression cannot be a selector (occur after a dot)
    En attendant une explication à ce problème, pourquoi "ResourcesCompat.getDrawable( this.resources, R.drawable.fille, null)" est accepté en affectation et pas en comparaison (qui n'est pas la question qui m'a amené à ce forum), je mettrai le sujet comme résolu
    J'apprends la programmation pour le plaisir

  8. #8
    Membre actif Avatar de stracoma
    Homme Profil pro
    Médecin
    Inscrit en
    Août 2013
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Maroc

    Informations professionnelles :
    Activité : Médecin

    Informations forums :
    Inscription : Août 2013
    Messages : 413
    Points : 229
    Points
    229
    Par défaut
    Citation Envoyé par Turvy Voir le message
    this réfère à l'instance courante d'un objet. Et this au sein du listener ne fait pas référence à l'activité mais au listener.
    Code kotlin : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    class MainActivity : AppCompatActivity() {
     
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
     
            btnImage.background = ResourcesCompat.getDrawable(this.resources, R.drawable.fille, null)
     
            if (btnImage.background == ResourcesCompat.getDrawable(this.resources, R.drawable.fille, null)){
                lblNom.text="fille"
            }
        }
    }


    Même en dehors du listener le problème reste le même:
    "ResourcesCompat.getDrawable( this.resources, R.drawable.fille, null)" est accepté en affectation et pas en comparaison
    J'apprends la programmation pour le plaisir

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

Discussions similaires

  1. Changer couleur texte dans fonction Time JavaScript ?
    Par varilux56 dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 29/03/2020, 21h53
  2. Réponses: 2
    Dernier message: 16/05/2017, 20h26
  3. changer la couleur d'un textview en fonction des données d'une base de données
    Par SimonFontaine dans le forum Composants graphiques
    Réponses: 6
    Dernier message: 18/08/2015, 11h06
  4. Changer style d'un TextView en fonction de son contenu
    Par catapicultrophe dans le forum Composants graphiques
    Réponses: 3
    Dernier message: 11/11/2013, 10h08
  5. Changer les textes des controles en fonctions de la bd
    Par paladice dans le forum Débuter
    Réponses: 3
    Dernier message: 17/04/2013, 15h47

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