Reputation: 15726
Android Studio 3.6
in my styles. 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>
in xml layout:
<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" />
When click button I try to change style like this:
dataBinding.buttonStartSearchBluetooth.setTextAppearance(R.style.buttonClickStyle)
But it change only text color. Not change backgroundTint
Why?
Upvotes: 6
Views: 10900
Reputation: 364694
To change programmatically the text color and the background color use:
setBackgroundTintList
to change the background color selector.setTextColor
to change the text colorSomething like:
button.setBackgroundTintList(ContextCompat.getColorStateList(this,R.color.button_selector));
button.setTextColor(ContextCompat.getColor(this, R.color....));
In any case there are some issues in your style.
MaterialComponents.Button.*
style as parentbackgroundTint
instead of android:backgroundTint
android:textAppearance
to define your text styleSomething like:
<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>
Upvotes: 10
Reputation: 218
Use this code to change MaterialComponents Button Background tint color.
yourbutton.setBackgroundTintList(ColorStateList.valueOf(Color.parseColor(color)));
Upvotes: 8
Reputation: 15433
setTextAppearance
only take care about styling the Text of the TextView not the background. Check the official doc to see supported property that setTextAppearance
affected.
Upvotes: 0
Reputation: 1073
try this code
yourbutton.setBackgroundTintList(contextInstance.getResources().getColorStateList(R.color.your_xml_name));
Upvotes: 4