关于Android的onLayout参数的困惑

时间:2014-03-10 13:48:23

标签: android android-layout android-view

我最近写了一个自定义布局,遇到了一些问题。我解决的其中一个是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屏幕的左上角(除非场景背后有某种类型的翻译调用)?

0 个答案:

没有答案