我正在以编程方式创建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
答案 0 :(得分:2)
width
的{{1}},height
,margins
等未立即应用,您需要等待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
内访问它。