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
的默认样式为insetBottom
和insetTop
,其值为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 的大小差异的主要内容,如果未能解决你的问题,请参考以下文章
可在 MaterialButton android 上绘制的选择器
Android MaterialButton使用详解,告别shapeselector