【问题标题】:Is any difference between a MaterialButton and a simple Button?MaterialButton 和简单的 Button 有什么区别吗?
【发布时间】:2020-01-15 11:04:18
【问题描述】:

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

<Button />

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

正如我所见,它们的行为都是 MaterialButtons。 如果我想获得旧普通按钮的行为,我必须使用:

<androidx.appcompat.widget.AppCompatButton />

提前致谢!

【问题讨论】:

    标签: android material-design android-appcompat android-button material-components-android


    【解决方案1】:

    如果您使用的是MaterialComponents 主题&lt;Button /&gt;&lt;com.google.android.material.button.MaterialButton /&gt; 之间没有区别

    启用了自动膨胀,它将在运行时将&lt;Button替换为&lt;com.google.android.material.button.MaterialButton

    MaterialComponentsViewInflater 在膨胀时将一些框架小部件替换为 Material Components 小部件,前提是在使用 MaterialComponents 主题时提供。
    AppCompat 也会发生类似的情况(您可以查看 MaterialComponentsViewInflater extends AppCompatViewInflater)。

    这意味着,如果您使用的是 MaterialComponents 主题,&lt;Button 在运行时会被替换为 &lt;com.google.android.material.button.MaterialButton

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

    这是一种选择,但不一定。
    这取决于你想要达到的目标。您还可以配置自定义样式,因为Widget.MaterialComponents.Button 样式继承自Widget.AppCompat.Button 样式。

    It is the difference:

    <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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-21
      • 2021-06-07
      • 2010-11-26
      • 2022-11-15
      • 2012-02-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多