无法以编程方式更改 backgroundTint
Can't change backgroundTint programmatically
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
为什么?
试试这个代码
yourbutton.setBackgroundTintList(contextInstance.getResources().getColorStateList(R.color.your_xml_name));
setTextAppearance
只关心 TextView 的文本样式而不是背景。检查 official doc 以查看受到 setTextAppearance
影响的支持 属性。
你的风格有些问题。
- 使用
MaterialComponents.Button.*
style 作为 parent
- 使用
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....));
使用此代码更改 MaterialComponents 按钮背景色。
yourbutton.setBackgroundTintList(ColorStateList.valueOf(Color.parseColor(color)));
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
为什么?
试试这个代码
yourbutton.setBackgroundTintList(contextInstance.getResources().getColorStateList(R.color.your_xml_name));
setTextAppearance
只关心 TextView 的文本样式而不是背景。检查 official doc 以查看受到 setTextAppearance
影响的支持 属性。
你的风格有些问题。
- 使用
MaterialComponents.Button.*
style 作为 parent - 使用
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....));
使用此代码更改 MaterialComponents 按钮背景色。
yourbutton.setBackgroundTintList(ColorStateList.valueOf(Color.parseColor(color)));