我有以下按钮:
<Button
android:id="@+id/addexperience_button"
style="@style/MyButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignLeft="@id/emptystate_image"
android:layout_alignRight="@id/emptystate_image"
android:layout_below="@id/emptystate_image"
android:text="@string/pickdetail_addexperience" />
这个造型:
<style name="MyButton" parent="AppTheme">
<item name="android:textColor">@color/white</item>
<item name="android:paddingLeft">@dimen/single_spacing</item>
<item name="android:paddingRight">@dimen/single_spacing</item>
<item name="android:background">@drawable/bg_primarybutton</item>
</style>
bg_primarybutton:
<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:insetBottom="6dp"
android:insetLeft="4dp"
android:insetRight="4dp"
android:insetTop="6dp">
<ripple android:color="?android:attr/colorControlHighlight">
<item>
<shape
android:shape="rectangle"
android:tint="@color/colorPrimary">
<corners android:radius="18dp" />
</shape>
</item>
</ripple>
</inset>
现在这个按钮与28.0.0-alpha1
一样:
但与alpha2
,alpha3
和rc01
看起来像这样:
为什么它在后来的版本中忽略了我的样式(特别是RC?)也许我的Button定义有根本性的错误?
原因是因为你的AppTheme
是Theme.MaterialComponents.Light.NoActionBar
,你的活动的inflater膨胀MaterialButton
而不是Button
你不能改变MaterialButton
的背景与旧的Button
相同(见doc)。
如果你想拥有和以前一样的风格,请用你的MyButton
样式替换
<style name="MyButton">
<item name="android:textColor">@color/white</item>
<item name="android:paddingLeft">@dimen/single_spacing</item>
<item name="android:paddingRight">@dimen/single_spacing</item>
<item name="backgroundTint">@color/colorPrimary</item>
<item name="cornerRadius">18dp</item>
<item name="rippleColor">?android:attr/colorControlHighlight</item>
</style>
请注意,在为View创建样式(将在AppTheme
属性中使用)时,不应扩展style="@style/MyStyle
。
他们介绍了MaterialButton
与alpha2的自动膨胀。在alpha1和alpha2上打开类android.support.design.theme.MaterialComponentsViewInflater
以查看差异。
如果你不想要这种自动充气MaterialButton
的行为改变你的AppTheme
to
<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar.Bridge">