一个MaterialButton和一个简单的Button有什么区别吗?

24

如果我将Theme.MaterialComponents.Light设置为我的主题,如果在xml布局中使用这两个按钮,它们之间会有什么区别吗?

<Button />

<com.google.android.material.button.MaterialButton />

我看到它们两个都表现得像MaterialButtons。 如果我想获得旧的普通按钮的行为,我必须使用:

当我观察它们的时候,它们都像MaterialButtons一样运作。如果我想要获取旧版简单按钮的行为,我需要使用:

<androidx.appcompat.widget.AppCompatButton />

谢谢您的提前帮助!

1个回答

43

如果您正在使用 MaterialComponents Theme ,那么<Button /><com.google.android.material.button.MaterialButton />之间没有区别

启用了自动填充功能,在运行时会将<Button替换为<com.google.android.material.button.MaterialButton

MaterialComponentsViewInflater 会在填充时将某些框架小部件替换为材料组件小部件,前提是使用了 MaterialComponents 主题。类似的事情也会发生在 AppCompat 中(您可以检查 MaterialComponentsViewInflater extends AppCompatViewInflater )。

这意味着,如果您正在使用 MaterialComponents 主题,则在运行时将<Button替换为<com.google.android.material.button.MaterialButton

  

如果我想获得旧的普通按钮行为,我必须使用:   <androidx.appcompat.widget.AppCompatButton />.

这是一种选择,但不一定需要。
这取决于您想要实现什么。您也可以配置自定义样式,因为 Widget.MaterialComponents.Button 样式继承了 Widget.AppCompat.Button 样式。

这就是区别

<style name="Widget.MaterialComponents.Button" parent="Widget.AppCompat.Button">
    <item name="enforceMaterialTheme">true</item>
    <item name="enforceTextAppearance">true</item>
    <item name="android:textAppearance">?attr/textAppearanceButton</item>
    <item name="android:textColor">@color/mtrl_btn_text_color_selector</item>
    <item name="android:paddingLeft">@dimen/mtrl_btn_padding_left</item>
    <item name="android:paddingRight">@dimen/mtrl_btn_padding_right</item>
    <item name="android:paddingTop">@dimen/mtrl_btn_padding_top</item>
    <item name="android:paddingBottom">@dimen/mtrl_btn_padding_bottom</item>
    <item name="android:insetLeft">0dp</item>
    <item name="android:insetRight">0dp</item>
    <item name="android:insetTop">@dimen/mtrl_btn_inset</item>
    <item name="android:insetBottom">@dimen/mtrl_btn_inset</item>
    <item name="android:stateListAnimator" ns2:ignore="NewApi">@animator/mtrl_btn_state_list_anim</item>
    <item name="cornerRadius">@null</item>
    <item name="elevation">@dimen/mtrl_btn_elevation</item>
    <item name="iconPadding">@dimen/mtrl_btn_icon_padding</item>
    <item name="iconTint">@color/mtrl_btn_text_color_selector</item>
    <item name="rippleColor">@color/mtrl_btn_ripple_color</item>
    <item name="backgroundTint">@color/mtrl_btn_bg_color_selector</item>
    <item name="shapeAppearance">?attr/shapeAppearanceSmallComponent</item>
  </style>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接