以编程方式设置的边距不会立即应用于视图

时间:2013-08-01 11:33:48

标签: android layoutparams

我正在以编程方式创建ImageView:

   LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(50,50);
   lp.setMargins(4,4,4,4);

   ImageView color = new ImageView(this);
   color.setLayoutParams(lp);
   colorPicker.addView(color); //adding view to linearlayout
   Log.i("X", "" + color.getX());
   ...

我试图通过color's检索color.getX() x poistion,但出于某种原因,它会返回0而不是4,这意味着它不考虑保证金

在对文档进行一些搜索之后我发现requestLayout()可能会解决这个问题,但它也无济于事

  

public void setMargins(int left,int top,int right,int bottom)

  设置边距(以像素为单位)。需要调用requestLayout(),以便考虑新的边距。 requestLayout()可以覆盖左右边距,具体取决于布局方向。

更新

如果我在onClick侦听器中调用color.getX(),它会按预期返回4

1 个答案:

答案 0 :(得分:2)

width的{​​{1}},heightmargins等未立即应用,您需要等待View尺寸和布局在屏幕上。

getWidth() returns 0 if set by android:layout_width="match_parent"

试试这个:

UI

您需要制作“颜色”变量ViewTreeObserver vto = color.getViewTreeObserver(); vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { this.layout.getViewTreeObserver().removeGlobalOnLayoutListener(this); Log.i("X", "" + color.getX()); } }); final才能在global内访问它。