如果你使用AbsoluteLayout(我知道它已被弃用,但这是解决我的 problem的唯一方法),你可以给childViews标签android:layout_x
和android:layout_y
在AbsoluteLayout
。
但是我不想在xml中设置这些信息,因为我只在运行时知道它们。那么如何在运行时以编程方式设置这些参数呢?我没有在视图上看到view.setLayoutX(int x)
之类的任何方法。
当我设置layout_x
和layout_y
值时,这是我的XML,工作正常:
<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/myLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:src="@drawable/myImageView"
android:layout_width="1298px"
android:layout_height="945px"
android:layout_x="0px"
android:layout_y="0px" />
<Button
android:id="@+id/myButton1"
android:text="23"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_x="50px"
android:layout_y="300px"
android:tag="23"/>
<Button
android:id="@+id/myButton2"
android:text="48"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_x="50px"
android:layout_y="300px"
android:tag="48"/>
</AbsoluteLayout>
实际上,我不想再在xml中设置任何按钮,而是通过远程检索一些信息并根据该信息添加按钮。
以下是我在onCreateMethod
添加这些按钮时使用的代码部分:
for (MyRemoteObject remoteObject: list) {
Button button = new Button(this);
button.setOnClickListener (listener);
button.setTag(remoteObject.id);
button.setText(remoteObject.id);
// button.setLayoutX(remoteObject.x) ????
// button.setLayoutY(remoteObject.y) ????
myLayout.addView(button);
}
答案 0 :(得分:14)
使用带LayoutParams:
的addView版本LayoutParams params = mLayout.generateLayoutParams();
params.x = remoteObject.x;
params.y = remoteObject.y;
mLayout.addView(button, params);
答案 1 :(得分:10)
在回复你对Mayra答案的评论时,我遇到了与RelativeLayout而不是AbsoluteLayout类似的问题。解决方案是使用类似的方法并将其转换为布局类型。像这样:
LayoutParams params = (android.widget.RelativeLayout.LayoutParams) this.generateDefaultLayoutParams();
params.height = 360;
params.width = 360;
params.addRule(CENTER_IN_PARENT);
this.addView(board, params);
我花了很长时间才想到这一点,所以如果他们需要,我想在这里发布给别人。
答案 2 :(得分:5)
我遇到了同样的问题,但发现了一个不同的解决方案。
int width = 100, height = 50, x = 10, y = 20;
Button button = new Button(this);
AbsoluteLayout myLayout = (AbsoluteLayout)findViewById(R.id.myLayout);
myLayout.add(button, new AbsoluteLayout.LayoutParams(width, height, x, y));
如果您找到“fill_parent”使用的内容(提示尝试-1),那么您可以将这些常量用于宽度和高度。
答案 3 :(得分:0)
我不知道为什么,但是当移动顶部和左边时,Android会将右边和底边保持在同一个位置。由于我无法正确改变宽度和高度(图像消失),我使用了this:
LayoutParams layoutParams=new LayoutParams(width, height);
layoutParams.leftMargin = newLeft;
layoutParams.topMargin = newTop;
imageView.setLayoutParams(layoutParams);
我不知道这是不是最好的方式,但对我有用。我已经在2.2+中对它进行了测试并且工作正常!
您必须导入android.widget.LinearLayout.LayoutParams;因为默认值是ViewGroup的LayoutParams(Davit T)
答案 4 :(得分:0)
以上答案是正确的。但这一个会更完美
AbsoluteLayout.LayoutParams layoutParams = new AbsoluteLayout.LayoutParams(AbsoluteLayout.LayoutParams.WRAP_CONTENT,AbsoluteLayout.LayoutParams.WRAP_CONTENT,DragLayer.int left_location,int top_location);
layout.addView(view,layoutParams)