MaterialButton和简单Button之间有什么区别吗?

bla*_*ade 2 android android-appcompat android-button material-design material-components-android

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

<Button />

<com.google.android.material.button.MaterialButton />
Run Code Online (Sandbox Code Playgroud)

如我所见,它们的行为均与MaterialButtons相同。如果要获取旧的普通按钮的行为,则必须使用:

<androidx.appcompat.widget.AppCompatButton />
Run Code Online (Sandbox Code Playgroud)

提前致谢!

Gab*_*tti 5

如果您使用的是Material Theme,则和之间没有区别<Button /><com.google.android.material.button.MaterialButton />

有一个自动充气启用这将取代 <Button<com.google.android.material.button.MaterialButton在运行时。

如果MaterialComponentsViewInflater正在使用“材料组件”主题,则在充气时,该替换用“材料组件” 替换一些框架小部件。
AppCompat也会发生类似的情况(您可以检查MaterialComponentsViewInflater extends AppCompatViewInflater)。

这意味着,如果您使用的是Material Theme,则在运行时将<Button其替换<com.google.android.material.button.MaterialButton

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

这是一个选择,但不一定。
这取决于您要实现的目标。您也可以配置自定义样式,因为Widget.MaterialComponents.Button继承是by 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>
Run Code Online (Sandbox Code Playgroud)