23

如果您使用 AbsoluteLayout(我知道它已被弃用,但这是解决我的问题的唯一方法),您可以给 childViews 标签android:layout_xandroid:layout_yAbsoluteLayout.

但是我不想在 xml 中设置这些信息,因为我只在运行时知道它们。那么如何在运行时以编程方式设置这些参数呢?我在 View 上看不到任何方法之类的view.setLayoutX(int x)东西。

这是我的 XML,当我设置layout_xlayout_y值时,它工作正常:

<?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);
  }
4

5 回答 5

16

使用采用LayoutParams的 addView 版本:

LayoutParams params = mLayout.generateLayoutParams();
params.x = remoteObject.x;
params.y = remoteObject.y;
mLayout.addView(button, params);
于 2010-08-09T16:42:15.963 回答
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);

我花了很长时间才弄清楚这一点,所以如果他们需要,我想把它贴在这里给其他人。

于 2011-03-25T20:16:34.863 回答
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)要使用什么,那么您可以将这些常量用于宽度和高度。

于 2011-04-19T10:45:34.977 回答
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)
于 2014-07-30T15:52:33.213 回答
0

我不知道为什么,但是当移动顶部和左侧边缘时,Android 会将右侧和底部边缘保持在同一位置。由于我无法正确更改宽度和高度(图像正在消失),我使用了这个

LayoutParams layoutParams=new LayoutParams(width, height);
layoutParams.leftMargin = newLeft;
layoutParams.topMargin = newTop;
imageView.setLayoutParams(layoutParams);

我不知道这是否是最好的方法,但对我有用。我已经在 2.2+ 中对其进行了测试,并且工作正常!

您必须导入 android.widget.LinearLayout.LayoutParams; 因为默认是 ViewGroup 的 LayoutParams (by Davit T )

于 2014-04-13T01:15:07.473 回答