Как изменить цвет фона TextView, пока он нажат? - PullRequest
1 голос
/ 08 ноября 2019

Я пытаюсь изменить фон TextView1, пока он нажат. Это мой text.xml в папке drawable:

<?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>

И это мой файл Kotlin:

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)
        }
    }

Я сделал это в соответствии с этим ответом: Программно сделать TextViewизменение цвета фона при нажатии

TextView1:

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

Кто-нибудь знает, что мне не хватает? Я начинающий.

Ответы [ 6 ]

1 голос
/ 08 ноября 2019

Вам нужно установить фон для текстового обзора до события onClick, а не после него. Прямо сейчас цвет применяется к новому Textview (t) после обработки события click. Это Textview не является представлением, отображаемым на экране (textview1)

. Используйте одно из следующих действий:

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

или

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

Кроме того,если вы изменили свой код на:

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

Вы заметите, что список состояний применяется после первого щелчка

0 голосов
/ 10 ноября 2019

Хотя, как указано выше, вы можете сделать это программно, правильный и простой способ сделать это - перейти к файлу styles и добавить собственный стиль для вашего TextView, в стиле которого вы можете добавлять цвета на основе различных состояний. и управляйте всем, что может предложить TextView, а затем просто перейдите в файл .xml, добавьте атрибут style и загрузите стиль, который вы только что создали, он прост и может быть повторно использован во всем приложении вместокопируйте и вставляйте весь этот код каждый раз, когда вам нужно сделать что-то вроде этого.

0 голосов
/ 08 ноября 2019

Как сказал @Saurabh, он не будет работать в прослушивателе кликов, просто выведите его наружу или объявите в ура XML-файла.

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

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

        val t = TextView(this)
        t.setBackgroundResource(R.drawable.text)

    }
0 голосов
/ 08 ноября 2019

Извините, это была моя ошибка в коде. Правильный код:

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

        textview1.setOnClickListener {
            //val t = TextView(this)
            textview1.setBackgroundResource(R.drawable.text)
0 голосов
/ 08 ноября 2019
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 голосов
/ 08 ноября 2019

Используйте только, если вы хотите, чтобы эффект пульсации для анимации клика

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