如何更改按钮的android:layout_marginTop?

时间:2016-03-25 18:56:41

标签: android-layout android-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

谢谢。

2 个答案:

答案 0 :(得分:1)

这种方式有效:

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

答案 1 :(得分:0)

尝试将重力设置为LayoutParams

params.gravity = Gravity.CENTER_HORIZONTAL;