如何在不重复的情况下更改 MaterialButton 的样式?
How to alter styles for MaterialButton without duplication?
我们正在使用 material components 1.0.0 并希望在整个应用程序中更改 MaterialButton 的样式。我们创建了自己的样式,扩展了组件库中的样式。现在我们有这样的东西:
<resources>
<style name="MyApp.Button" parent="Widget.MaterialComponents.Button">
<item name="android:minHeight">@dimen/action_button_min_height</item>
<item name="android:minWidth">@dimen/action_button_min_width</item>
<item name="android:fontFamily">@fonts/customFont</item>
<item name="android:singleLine">true</item>
<item name="android:textAllCaps">false</item>
<item name="android:paddingLeft">8dp</item>
<item name="android:paddingRight">8dp</item>
<item name="android:insetTop">0dp</item>
<item name="android:insetBottom">0dp</item>
</style>
<style name="MyApp.Button.Unelevated" parent="Widget.MaterialComponents.Button.UnelevatedButton">
<item name="android:minHeight">@dimen/action_button_min_height</item>
<item name="android:minWidth">@dimen/action_button_min_width</item>
<item name="android:fontFamily">@fonts/customFont</item>
<item name="android:singleLine">true</item>
<item name="android:textAllCaps">false</item>
<item name="android:paddingLeft">8dp</item>
<item name="android:paddingRight">8dp</item>
<item name="android:insetTop">0dp</item>
<item name="android:insetBottom">0dp</item>
</style>
<style name="MyApp.Button.Text" parent="Widget.MaterialComponents.Button.TextButton">
<item name="android:minHeight">@dimen/action_button_min_height</item>
<item name="android:minWidth">@dimen/action_button_min_width</item>
<item name="android:fontFamily">@fonts/customFont</item>
<item name="android:singleLine">true</item>
<item name="android:textAllCaps">false</item>
<item name="android:paddingLeft">8dp</item>
<item name="android:paddingRight">8dp</item>
<item name="android:insetTop">0dp</item>
<item name="android:insetBottom">0dp</item>
</style>
<style name="MyApp.Button.Outlined" parent="Widget.MaterialComponents.Button.OutlinedButton">
<item name="android:minHeight">@dimen/action_button_min_height</item>
<item name="android:minWidth">@dimen/action_button_min_width</item>
<item name="android:fontFamily">@fonts/customFont</item>
<item name="android:singleLine">true</item>
<item name="android:textAllCaps">false</item>
<item name="android:paddingLeft">8dp</item>
<item name="android:paddingRight">8dp</item>
<item name="android:insetTop">0dp</item>
<item name="android:insetBottom">0dp</item>
</style>
</resources>
有没有办法避免为每种样式定义相同的值?
由于您使用了不同的父级样式,因此您只能简化部分属性,而不是全部。
例如你可以定义:
<style name="MyButtonTextAppearance" parent="@style/TextAppearance.MaterialComponents.Button>
<item name="fontFamily">.....</item>
<item name="android:fontFamily">...</item>
<item name="android:textStyle">...</item>
<item name="android:textAllCaps">...</item>
<item name="android:textSize">...</item>
<item name="android:letterSpacing">...</item>
</style>
并且在您的样式中,您可以使用以下方法删除相同的属性:
<style name="MyApp.Button" parent="Widget.MaterialComponents.Button">
....
<item name="android:textAppearance">@style/MyButtonTextAppearance</item>
</style>
我们正在使用 material components 1.0.0 并希望在整个应用程序中更改 MaterialButton 的样式。我们创建了自己的样式,扩展了组件库中的样式。现在我们有这样的东西:
<resources>
<style name="MyApp.Button" parent="Widget.MaterialComponents.Button">
<item name="android:minHeight">@dimen/action_button_min_height</item>
<item name="android:minWidth">@dimen/action_button_min_width</item>
<item name="android:fontFamily">@fonts/customFont</item>
<item name="android:singleLine">true</item>
<item name="android:textAllCaps">false</item>
<item name="android:paddingLeft">8dp</item>
<item name="android:paddingRight">8dp</item>
<item name="android:insetTop">0dp</item>
<item name="android:insetBottom">0dp</item>
</style>
<style name="MyApp.Button.Unelevated" parent="Widget.MaterialComponents.Button.UnelevatedButton">
<item name="android:minHeight">@dimen/action_button_min_height</item>
<item name="android:minWidth">@dimen/action_button_min_width</item>
<item name="android:fontFamily">@fonts/customFont</item>
<item name="android:singleLine">true</item>
<item name="android:textAllCaps">false</item>
<item name="android:paddingLeft">8dp</item>
<item name="android:paddingRight">8dp</item>
<item name="android:insetTop">0dp</item>
<item name="android:insetBottom">0dp</item>
</style>
<style name="MyApp.Button.Text" parent="Widget.MaterialComponents.Button.TextButton">
<item name="android:minHeight">@dimen/action_button_min_height</item>
<item name="android:minWidth">@dimen/action_button_min_width</item>
<item name="android:fontFamily">@fonts/customFont</item>
<item name="android:singleLine">true</item>
<item name="android:textAllCaps">false</item>
<item name="android:paddingLeft">8dp</item>
<item name="android:paddingRight">8dp</item>
<item name="android:insetTop">0dp</item>
<item name="android:insetBottom">0dp</item>
</style>
<style name="MyApp.Button.Outlined" parent="Widget.MaterialComponents.Button.OutlinedButton">
<item name="android:minHeight">@dimen/action_button_min_height</item>
<item name="android:minWidth">@dimen/action_button_min_width</item>
<item name="android:fontFamily">@fonts/customFont</item>
<item name="android:singleLine">true</item>
<item name="android:textAllCaps">false</item>
<item name="android:paddingLeft">8dp</item>
<item name="android:paddingRight">8dp</item>
<item name="android:insetTop">0dp</item>
<item name="android:insetBottom">0dp</item>
</style>
</resources>
有没有办法避免为每种样式定义相同的值?
由于您使用了不同的父级样式,因此您只能简化部分属性,而不是全部。
例如你可以定义:
<style name="MyButtonTextAppearance" parent="@style/TextAppearance.MaterialComponents.Button>
<item name="fontFamily">.....</item>
<item name="android:fontFamily">...</item>
<item name="android:textStyle">...</item>
<item name="android:textAllCaps">...</item>
<item name="android:textSize">...</item>
<item name="android:letterSpacing">...</item>
</style>
并且在您的样式中,您可以使用以下方法删除相同的属性:
<style name="MyApp.Button" parent="Widget.MaterialComponents.Button">
....
<item name="android:textAppearance">@style/MyButtonTextAppearance</item>
</style>