не удается изменить цвет кнопки с помощью события onClick, кнопка становится фиолетовой

#android #kotlin #android-layout #data-binding #onclick

Вопрос:

Я хочу изменить цвет кнопки после нажатия на любой цвет, который я создал в цветах/чертежах, но кнопки меняются не так, как они задумывались. Я думаю, что перепробовал все на этом сайте, но так и не смог найти решение. android:backgroundTint это не становится решением. Я просто хочу изменить свои цвета на любой цвет, который я создал, а не на фиолетовый.

 <Button
    android:id="@ id/button"
    android:layout_width="254dp"
    android:layout_height="62dp"
    android:background="@color/white"
    android:text="Press"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.496"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@ id/textView"
    app:layout_constraintVertical_bias="0.857" />
 

темы;

 <resources xmlns:tools="http://schemas.android.com/tools">
<style name="Theme.YdsYokdil" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/purple_500</item>
    <item name="colorPrimaryVariant">@color/purple_700</item>
    <item name="colorOnPrimary">@color/white</item>
    <item name="colorSecondary">@color/teal_200</item>
    <item name="colorSecondaryVariant">@color/teal_700</item>
    <item name="colorOnSecondary">@color/black</item>
    <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>    
</style>
 

темы(ночь)

 <resources xmlns:tools="http://schemas.android.com/tools">
<style name="Theme.YdsYokdil" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/purple_200</item>
    <item name="colorPrimaryVariant">@color/purple_700</item>
    <item name="colorOnPrimary">@color/black</item>>
    <item name="colorSecondary">@color/teal_200</item>
    <item name="colorSecondaryVariant">@color/teal_200</item>
    <item name="colorOnSecondary">@color/black</item>
    <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
</style>
 

мой код(для изменения цвета)

 var isRedButtonsClicked = true

    fun colorButtonsRed() {
        binding.button.setBackgroundColor(R.color.red)
    }
     binding.button.setOnClickListener {
        when (isRedButtonsClicked) {
            true -> colorButtonsRed()
        } 
        setContentView(binding.root)
 

Комментарии:

1. Кроме того, что setContentView внутри onClickListenet странно и не нужно

2. @Amin когда я удаляю setContentView(binding.root) приложение, оно не открывается, давая белый экран. Я не знаю, связаны ли эти два

Ответ №1:

setBackgroundColor требуется цвет int ( 0xFFFF0000 например, который является красным цветом в формате argb) R.color.red — это ColorRes (идентификатор ресурса из R).

Для того, чтобы получить цвет из тех R.color.xxx , которые мы должны использовать ContextCompat.getColor(context, R.color.xxx)

Поэтому измените свой код на

 fun colorButtonsRed() {
    binding.button.setBackgroundColor(
        ContextCompat.getColor(context, R.color.red)
    )
}
 

Комментарии:

1. ‘(контекст, Р. цвет.красный)’ какой контекст здесь нужен? это дает ошибку

2. хорошо, я должен был сослаться (контекст: это, Р. цвет.красный) ты спаситель! Спасибо. это сработало. 🙂