改变位置后设置按钮centerhorizo​​ntal

时间:2015-11-26 16:33:53

标签: android button

我正在编写一个Android应用程序,我在更改按钮位置后设置按钮CenterHorizo​​ntal有困难。我在xml文件中创建了一个按钮,我随机改变了它的位置。

Xml:

   <Button
     android:id="@+id/button1"
     android:layout_width="90dp"
     android:layout_height="90dp"
     android:background="@drawable/pocs"
     android:layout_centerHorizontal="true"
     android:layout_below="@+id/level"
     android:onClick="onClick"/>

Java代码:

        final Point sizePoint = new Point();
                    activity.getWindowManager().getDefaultDisplay().getSize(sizePoint);
                    int mScreenWidth = sizePoint.x;
                    int mScreenHeight = sizePoint.y;

                    btn.setEnabled(true);
                    Random r = new Random();

                    x2 = r.nextInt(mScreenWidth - 100);
                    y2 = r.nextInt(mScreenHeight - 100);

                    btn.setX(x2);
                    btn.setY(y2);

我做了10次,之后我想把按钮放在屏幕中间:

         RelativeLayout.LayoutParams layoutParams =
         (RelativeLayout.LayoutParams)btn.getLayoutParams();

    layoutParams.addRule(RelativeLayout.CENTER_HORIZONTAL);
    layoutParams.addRule(RelativeLayout.CENTER_VERTICAL);
    btn.setLayoutParams(layoutParams); 

没有任何反应,按钮保持在最后一次。但是,当我不更改按钮位置时,它可以正常工作,按钮会跳到屏幕中间。将按钮位置改变10次后,是否可以这样做?

2 个答案:

答案 0 :(得分:0)

LayoutParams仅用于元素的初始定位。

SetX / SetY会在布局定位后更改该位置。

相反,您应该保存按钮位置(GetX,GetY)或计算新位置 setX((screenWidth - buttonWidth) / 2)&amp; setY((screenHeight - buttonHeight) / 2)

答案 1 :(得分:0)

您可以尝试使用边距而不是setXsetY

RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) btn.getLayoutParams();
params.leftMargin = 50; // Your X coordinate
params.topMargin = 60; // Your Y coordinate
btn.setLayoutParams(params);

并在中心对齐

RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) btn.getLayoutParams();
layoutParams.addRule(RelativeLayout.CENTER_HORIZONTAL);
layoutParams.addRule(RelativeLayout.CENTER_VERTICAL);
layoutParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT, 0);
layoutParams.addRule(RelativeLayout.ALIGN_PARENT_TOP, 0);
btn.setLayoutParams(layoutParams);

注意:将params.leftMarginparams.topMargin替换为随机值。