Android 覆盖预定义的父样式
Android override predefined parent style
我使用 MaterialButton 的预定义样式之一。
<com.google.android.material.button.MaterialButton
style="@style/Widget.MaterialComponents.Button.OutlinedButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Approve" />
这是我使用的样式预定义样式。
</style>
<style name="Widget.MaterialComponents.Button.OutlinedButton" parent="Widget.MaterialComponents.Button.TextButton">
<item name="android:paddingLeft">@dimen/mtrl_btn_padding_left</item>
<item name="android:paddingRight">@dimen/mtrl_btn_padding_right</item>
<item name="strokeColor">@color/mtrl_btn_stroke_color_selector</item>
<item name="strokeWidth">@dimen/mtrl_btn_stroke_size</item>
</style>
这是 Widget.MaterialComponents.Button.OutlinedButton
的父样式
<style name="Widget.MaterialComponents.Button.TextButton" parent="Widget.MaterialComponents.Button.UnelevatedButton">
<item name="android:textColor">@color/mtrl_text_btn_text_color_selector</item>
<item name="android:paddingLeft">@dimen/mtrl_btn_text_btn_padding_left</item>
<item name="android:paddingRight">@dimen/mtrl_btn_text_btn_padding_right</item>
<item name="iconTint">@color/mtrl_text_btn_text_color_selector</item>
<item name="iconPadding">@dimen/mtrl_btn_text_btn_icon_padding</item>
<item name="backgroundTint">@color/mtrl_btn_text_btn_bg_color_selector</item>
<item name="rippleColor">@color/mtrl_btn_text_btn_ripple_color</item>
</style>
现在我试图在我的 styles.xml
中覆盖 Widget.MaterialComponents.Button.TextButton
的一个属性
<style name="Widget.MaterialComponents.Button.TextButton">
<item name="android:textColor">@color/colorAccent</item>
</style>
我想知道这是否是覆盖预定义样式的正确方法,并且样式 Widget.MaterialComponents.Button.OutlinedButton
将使用 @color/colorAccent
作为文本颜色。我认为它有效,但我不确定这种方法是否有任何副作用或是否有更好的方法?
您可以使用以下其中一项:
<style name="MyCustomStyle" parent="Widget.MaterialComponents.Button.OutlinedButton">
<item name="android:textColor">@color/colorAccent</item>
</style>
<style name="Widget.MaterialComponents.Button.OutlinedButton.MyCustomStyle">
<item name="android:textColor">@color/colorAccent</item>
</style>
使用这些方法,您将继承父样式的所有属性,并且您将只声明您喜欢的那些属性 change/override。
并在您的布局文件中使用此样式,如下所示:
<com.google.android.material.button.MaterialButton
style="@style/MyCustomStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Approve" />
或
<com.google.android.material.button.MaterialButton
style="@style/Widget.MaterialComponents.Button.OutlinedButton.MyCustomStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Approve" />
我使用 MaterialButton 的预定义样式之一。
<com.google.android.material.button.MaterialButton
style="@style/Widget.MaterialComponents.Button.OutlinedButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Approve" />
这是我使用的样式预定义样式。
</style>
<style name="Widget.MaterialComponents.Button.OutlinedButton" parent="Widget.MaterialComponents.Button.TextButton">
<item name="android:paddingLeft">@dimen/mtrl_btn_padding_left</item>
<item name="android:paddingRight">@dimen/mtrl_btn_padding_right</item>
<item name="strokeColor">@color/mtrl_btn_stroke_color_selector</item>
<item name="strokeWidth">@dimen/mtrl_btn_stroke_size</item>
</style>
这是 Widget.MaterialComponents.Button.OutlinedButton
<style name="Widget.MaterialComponents.Button.TextButton" parent="Widget.MaterialComponents.Button.UnelevatedButton">
<item name="android:textColor">@color/mtrl_text_btn_text_color_selector</item>
<item name="android:paddingLeft">@dimen/mtrl_btn_text_btn_padding_left</item>
<item name="android:paddingRight">@dimen/mtrl_btn_text_btn_padding_right</item>
<item name="iconTint">@color/mtrl_text_btn_text_color_selector</item>
<item name="iconPadding">@dimen/mtrl_btn_text_btn_icon_padding</item>
<item name="backgroundTint">@color/mtrl_btn_text_btn_bg_color_selector</item>
<item name="rippleColor">@color/mtrl_btn_text_btn_ripple_color</item>
</style>
现在我试图在我的 styles.xml
中覆盖Widget.MaterialComponents.Button.TextButton
的一个属性
<style name="Widget.MaterialComponents.Button.TextButton">
<item name="android:textColor">@color/colorAccent</item>
</style>
我想知道这是否是覆盖预定义样式的正确方法,并且样式 Widget.MaterialComponents.Button.OutlinedButton
将使用 @color/colorAccent
作为文本颜色。我认为它有效,但我不确定这种方法是否有任何副作用或是否有更好的方法?
您可以使用以下其中一项:
<style name="MyCustomStyle" parent="Widget.MaterialComponents.Button.OutlinedButton">
<item name="android:textColor">@color/colorAccent</item>
</style>
<style name="Widget.MaterialComponents.Button.OutlinedButton.MyCustomStyle">
<item name="android:textColor">@color/colorAccent</item>
</style>
使用这些方法,您将继承父样式的所有属性,并且您将只声明您喜欢的那些属性 change/override。
并在您的布局文件中使用此样式,如下所示:
<com.google.android.material.button.MaterialButton
style="@style/MyCustomStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Approve" />
或
<com.google.android.material.button.MaterialButton
style="@style/Widget.MaterialComponents.Button.OutlinedButton.MyCustomStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Approve" />