1
votes

Comment changer la couleur d'arrière-plan de TextView lorsqu'il est enfoncé?

J'essaye de changer l'arrière-plan de TextView1 pendant qu'il est enfoncé. Ceci est mon fichier text.xml dans le dossier pouvant être dessiné:

 var textview1 = findViewById(R.id.TextView1) as TextView

        textview1.setOnClickListener {
            //val t = TextView(this)
            textview1.setBackgroundResource(R.drawable.text)

Et voici mon fichier Kotlin:

<TextView
        android:id="@+id/TextView1"
        android:layout_width="50dp"
        android:layout_height="50dp"/>

J'ai fait cela en fonction de cette réponse Réponse: Modifier par programme la couleur d'arrière-plan de TextView en appuyant sur p>

TextView1:

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_app)

        var textview1 = findViewById(R.id.TextView1) as TextView

        textview1.setOnClickListener{
            val t = TextView(this)
            t.setBackgroundResource(R.drawable.text)
        }
    }

Est-ce que quelqu'un sait ce que je manque? Je suis débutant.


Désolé, c'était mon erreur de code. Le code correct est:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@android:color/white" />
    <item android:drawable="@android:color/black"/>
</selector>


2 commentaires

Définissez ontouchlistener si le fichier drawale ne fonctionne pas et définissez l'événement de toucher vers le bas et retouchez pour définir une couleur différente


Habituellement, dans une vue en lecture seule, il n'y a pas d'état enfoncé. Êtes-vous sûr de rechercher une vue de texte? Pourquoi pas un bouton de texte?


4 Réponses :


0
votes

À n'utiliser que si vous souhaitez créer un effet d'entraînement pour l'animation de clic

android:background="?android:attr/selectableItemBackground"


0 commentaires

-1
votes
override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_training)

        var textview1 = findViewById(R.id.TextView1) as TextView

        textview1.setOnClickListener{
            val t = TextView(this)
            t.setBackground(R.drawable.text)
        }
    }

0 commentaires

1
votes

Vous devez définir l'arrière-plan de la vue de texte avant l'événement onClick et non après. À l'heure actuelle, la couleur est appliquée sur une nouvelle vue textuelle ( t ) après le traitement de l'événement de clic. Cette vue textuelle n'est pas la vue qui a été rendue à l'écran ( textview1 )

Utilisez l'une des options suivantes:

textview1.setOnClickListener{
            textview1.setBackgroundResource(R.drawable.text)
        }

ou p >

textview1.setBackgroundResource(R.drawable.text)
textview1.setOnClickListener{
             //Handle click
        }

De plus, si vous avez changé votre code en:

<TextView
        android:id="@+id/TextView1"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:background="@drawable/text"/>

Vous remarquerez que la liste d'états est appliquée après le premier clic


0 commentaires

0
votes

Bien que, comme indiqué ci-dessus, vous puissiez le faire par programme, le moyen correct et simple de le faire est d'accéder à votre fichier styles et d'ajouter un style personnalisé pour votre TextView, dans le style que vous pouvez ajouter couleurs basées sur différents états et contrôlez tout ce que TextView a à offrir, puis accédez simplement à votre fichier .xml et ajoutez l'attribut de style et chargez le style que vous venez de créer créé, c'est facile et peut être réutilisé sur l'ensemble de votre application au lieu de copier-coller tout ce code chaque fois que vous devez faire quelque chose comme ça.


0 commentaires