[英]Margin set programmatically not applied instantly to the view
我正在以编程方式创建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.getX()
检索color's
x位置,但是由于某种原因,它返回0
而不是4
这意味着它没有考虑边距
在文档中进行了一些搜索之后,我发现requestLayout()
可能会解决此问题,但这对您都没有帮助
public void setMargins(int左,int顶部,int右,int底部)
设置边距,以像素为单位。 需要完成对requestLayout()的调用,以便考虑新的边距。 根据布局方向,requestLayout()可以覆盖左右边距。
UPDATE
如果我在onClick侦听器中调用color.getX()
它将按预期返回4
不会立即应用View
的width
, height
, margins
等,您需要等待UI
大小确定并在屏幕上布局。
如果由android设置,则getWidth()返回0:layout_width =“ match_parent”
尝试这个:
ViewTreeObserver vto = color.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
this.layout.getViewTreeObserver().removeGlobalOnLayoutListener(this);
Log.i("X", "" + color.getX());
}
});
您将需要使“ color”变量为final
或global
,以便能够在listener
访问它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.