我正在编写一个Android应用程序,我在更改按钮位置后设置按钮CenterHorizontal有困难。我在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次后,是否可以这样做?
答案 0 :(得分:0)
LayoutParams仅用于元素的初始定位。
SetX / SetY会在布局定位后更改该位置。
相反,您应该保存按钮位置(GetX,GetY)或计算新位置
setX((screenWidth - buttonWidth) / 2)
&amp; setY((screenHeight - buttonHeight) / 2)
答案 1 :(得分:0)
您可以尝试使用边距而不是setX
和setY
。
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.leftMargin
和params.topMargin
替换为随机值。