为什么边距不适用于此按钮?

时间:2018-11-18 17:25:03

标签: android

我正在以编程方式创建按钮,并在将每个按钮添加到网格视图之前指定它们的高度和宽度:

Button discountButton = new Button(this, null, 0, R.style.discount_select_button);
discountButton.setText("blah");
discountButton.setWidth(300);
discountButton.setHeight(300);
discountsGrid.addView(discountButton);

按钮使用此样式,该样式中定义的所有项目都将被应用,除了“ layout_margin”之外,为什么会这样?

<style name="discount_select_button" parent="@android:style/Widget.Button">
    <item name="android:layout_margin">10dp</item>
    <item name="android:textAlignment">center</item>
    <item name="android:textColor">@color/white_light_background_focusable_color</item>
    <item name="android:background">@drawable/discount_selection_button_shape</item>
    <item name="android:gravity">fill_horizontal</item>
    <item name="android:autoSizeMinTextSize">1sp</item>
    <item name="android:autoSizeMaxTextSize">25sp</item>
    <item name="android:autoSizeTextType">uniform</item> 
    <item name="android:autoSizeStepGranularity">1sp</item>
</style>

当我通过编程方式应用上述所有属性时,所有内容都将成功应用,但是在样式中定义时不会成功。

我定位的最低API级别是26

1 个答案:

答案 0 :(得分:1)

layout_开头的属性实际上不是视图的一部分,它们是该视图的LayoutParams对象的一部分,并且它们定义了 parent 的行为。

如果您直接在XML中使用该样式定义,则可以使用边距,但是对于Java,则不能。

您可以创建一个ViewGroup.MarginLayoutParams对象并设置params.topMargin字段以获得所需的结果。