Не могу изменить backgroundTint программно - PullRequest
0 голосов
/ 27 октября 2019

Android Studio 3.6

в моих стилях. xml

 <style name="buttonStyle">
        <item name="android:textColor">@color/default_button_textColor</item>
        <item name="android:backgroundTint">@color/button_bg_color</item>
        <item name="android:textSize">18sp</item>
        <item name="android:textAllCaps">true</item>
    </style>

    <style name="buttonClickStyle">
        <item name="android:textColor">@color/button_bg_color</item>
        <item name="android:backgroundTint">@color/button_click_bg_color</item>
        <item name="android:textSize">18sp</item>
        <item name="android:textAllCaps">true</item>
    </style>

в формате xml:

 <com.google.android.material.button.MaterialButton
            android:id="@+id/buttonStartSearchBluetooth"
            style="@style/buttonStyle"
            android:layout_width="0dp"
            android:layout_height="@dimen/button_height"
            android:layout_margin="@dimen/button_margin"
            android:onClick="onClickButtonStartSearch"
            android:text="@string/start_search"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent" />

При нажатии кнопки я пытаюсь изменить стиль следующим образом:

dataBinding.buttonStartSearchBluetooth.setTextAppearance(R.style.buttonClickStyle)

Но это меняет только цвет текста. Не меняется backgroundTint

Почему?

Ответы [ 3 ]

1 голос
/ 27 октября 2019

В вашем стиле есть некоторые проблемы.

  • используйте MaterialComponents.Button.* стиль в качестве родителя
  • используйте backgroundTint вместо android:backgroundTint
  • используйте android:textAppearance для определенияВаш стиль текста

Что-то вроде:

<style name="buttonStyle" parent="@style/Widget.MaterialComponents.Button">
  <item name="android:textColor">@color/default_button_textColor</item>
  <item name="backgroundTint">@color/my_selector</item>
  <item name="android:textAppearance">@style/my_textAppearance</item>
</style>
<style name="my_textAppearance" parent="@style/TextAppearance.MaterialComponents.Button">
    <item name="android:textSize">18sp</item>
    <item name="android:textAllCaps">true</item>
</style>

Наконец, для программного изменения цвета текста и фона используйте:

  • метод setBackgroundTintList для изменения селектора цвета фона.
  • метод setTextColor для изменения цвета текста

Что-то вроде:

    button.setBackgroundTintList(ContextCompat.getColorStateList(this,R.color.button_selector));
    button.setTextColor(ContextCompat.getColor(this, R.color....));
1 голос
/ 27 октября 2019

попробуйте этот код

yourbutton.setBackgroundTintList(contextInstance.getResources().getColorStateList(R.color.your_xml_name));
0 голосов
/ 27 октября 2019

setTextAppearance только позаботьтесь о стилизации текста TextView, а не фона. Проверьте официальный документ , чтобы увидеть поддерживаемое свойство, на которое влияет setTextAppearance.

...