我最近写了一个自定义布局,遇到了一些问题。我解决的其中一个是onLayout参数left,top,right和bottom但我不确切知道它为什么有效。我最初认为为了让我定位孩子,我必须使,例如,y轴定位在顶部和底部参数值之间,而x轴定位在左右值之间。在使用该方法编码后,我编写了如下xml布局:
<LinearLayout android:orientation="vertical">
<com....customlayout>
<ImageView />
<ImageView />
</com....customlayout>
<com....customlayout>
<ImageView />
<ImageView />
</com....customlayout>
</LinearLayout>
我遇到的问题是第二个自定义布局没有画出它的孩子。我查看了为自定义布局编写的onLayout代码,最后我更改了以下内容:
void onLayout(boolean changed, int l, int t, int r, int b) {
int leftPos = l;
int topPos = t;
...
dst.left = leftPos + child.getPaddingLeft();
dst.right = leftPos + child.getMeasuredWidth();// pixels;
dst.top = topPos + child.getPaddingTop();
dst.bottom = topPos + child.getMeasuredHeight();// pixels;
...
}
到
void onLayout(boolean changed, int l, int t, int r, int b) {
int leftPos = l;
//int topPos = t;
...
dst.left = leftPos + child.getPaddingLeft();
dst.right = leftPos + child.getMeasuredWidth();// pixels;
dst.top = /*topPos +*/child.getPaddingTop();
dst.bottom = /*topPos +*/ child.getMeasuredHeight();// pixels;
...
}
第二个自定义布局开始绘制它的孩子。所以我最初的假设是错误的。我想我必须将dst.left定位为小于l参数,dst.right要小于r参数,依此类推。我的问题是,为什么?难道我不会把孩子放在Android屏幕的左上角(除非场景背后有某种类型的翻译调用)?