如何更改按钮的 android:layout_marginTop?

how do I change the android:layout_marginTop of a button?

我需要以编程方式更改按钮的 属性 android:layout_marginTop。但是下面的代码不会产生与 xml 上的更改相同的结果。我想知道是否有人能发现问题,这是我的按钮:

<Button
    android:id="@+id/cta_button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:layout_marginTop="0dp"
    android:background="@color/cta_button_background"
    android:text="CTA"
    android:textColor="@color/cta_button_foreground"
    android:textSize="18sp"
    android:visibility="visible" />

现在我需要根据一些逻辑以编程方式更改 "marginTop"。这是我很累但不能正常工作的东西。

    // Adjust button to float above the image
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
            LinearLayout.LayoutParams.WRAP_CONTENT);

    int marginTop = Pixel.convertPxToDp(someNumber);
    params.setMargins(0, marginTop, 0, 0);
    mCallToActionButton.setLayoutParams(params);
    mCallToActionButton.invalidate();

"mCallToActionButton" 有一个指向按钮的有效指针,'someNumber' 可以是任何值。

我使用了这个线程,但按钮移动到了其他地方,而不仅仅是改变了它的 topMargin

How to set a button's parameters programatically

谢谢。

尝试为 LayoutParams 设置引力

params.gravity = Gravity.CENTER_HORIZONTAL;

这种方式可行:

ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) mCallToActionButton.getLayoutParams();
params.topMargin = Pixel.convertDpToPx(newImageMargin);
mCallToActionButton.setLayoutParams(params);