MaterialButton 与 Button 的大小差异

Posted

技术标签:

【中文标题】MaterialButton 与 Button 的大小差异【英文标题】:MaterialButton size difference to Button 【发布时间】:2019-11-12 09:16:58 【问题描述】:

我正在设置一个新的应用程序,并发现 materialButton 的高度与我设置的大小不匹配。 所以我尝试了常规按钮,正如你们在下面的屏幕截图中看到的那样。 这些按钮具有不同的高度,尽管它们的高度与您在我的代码中看到的相同。

如何使用 MaterialButton 获得正常高度?

谢谢。

公共类 MainActivity 扩展 AppCompatActivity

MaterialButton materialButton;
Button button;

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);

    LinearLayout linearLayout = new LinearLayout(this);
    linearLayout.setId(getGeneratedId());

    setContentView(linearLayout);

    int buttonWidth = getResources().getDimensionPixelSize(R.dimen.buttonWidth);
    int buttonHeight = getResources().getDimensionPixelSize(R.dimen.buttonHeight);

    LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(buttonWidth, buttonHeight);

    materialButton = new MaterialButton(this);
    materialButton.setId(getGeneratedId());
    materialButton.setLayoutParams(layoutParams);
    materialButton.setBackgroundColor(Color.BLUE);
    materialButton.setText("MatrialB");
    materialButton.setTextColor(Color.WHITE);


    button = new Button(this);
    button.setId(getGeneratedId());
    button.setLayoutParams(layoutParams);
    button.setBackgroundColor(Color.RED);
    button.setText("Button");
    button.setTextColor(Color.WHITE);

    linearLayout.addView(materialButton);
    linearLayout.addView(button);
    


Integer getGeneratedId() 
    return ViewCompat.generateViewId();

【问题讨论】:

它们的高度相同。使用 android Studio 中的 Layout Inspector 进行确认。您还可以使用 Layout Inspector 尝试确定 rendering 不同的原因。它可能是MaterialButton 使用的背景形状,或者MaterialButton 可能定义了默认的顶部/底部边距。 谢谢@CommonsWare,我可以确认。所有属性之间的区别是填充。普通按钮具有 mPaddingTop 27、mPaddingBottom 27 和 mUserPaddingBottom 27。材质 Buttons 具有相同的值,但这些值还有 mUserPaddingEnd 44、mUserPaddingLeft 44、mUserPaddingRight 44 和 mUserPaddingStart 44。我不知道该怎么做。 给你的Button添加一些填充,我猜。 它只是将按钮从里面的文本字段向下移动。 @CommonsWare 您还有其他建议吗?我仍然面临这个问题.. 【参考方案1】:

我相信 MaterialButton 顶部和底部的空间来自 android:insetTop/android:insetBottom,对我来说是 6dp,材质组件为 1.0.0。我不确定,如何以编程方式设置这些,但可以在 xml 中轻松完成:

<com.google.android.material.button.MaterialButton
      android:layout_
      android:layout_
      android:insetBottom="0dp"
      android:insetTop="0dp"/>

【讨论】:

谢谢,我会检查的。 很棒的答案!另外使用“app:backgroundTint”来改变按钮的背景颜色和使用“app:cornerRadius”来改变按钮的半径。【参考方案2】:

MaterialButton 的默认样式为insetBottominsetTop,其值为6dp

您可以在没有/使用垂直插图的情况下检查差异:

您可以使用以下方法更改默认值:

<com.google.android.material.button.MaterialButton
    android:insetTop="0dp"
    android:insetBottom="0dp"

或以编程方式(至少需要1.3.0-alpha03):

    button.insetTop = 0
    button.insetBottom = 0

【讨论】:

以上是关于MaterialButton 与 Button 的大小差异的主要内容,如果未能解决你的问题,请参考以下文章

Flutter Button(按钮)

可在 MaterialButton android 上绘制的选择器

Android MaterialButton使用详解,告别shapeselector

Android MaterialButton使用详解,告别shapeselector

更改颜色选择器/文本新文本 MaterialButton

如何在kotlin android的MaterialButton中获取背景颜色