View 的 setX()、setY() 和 layout()
Posted
技术标签:
【中文标题】View 的 setX()、setY() 和 layout()【英文标题】:View's setX(), setY() and layout() 【发布时间】:2015-01-02 11:01:14 【问题描述】:这些方法之间实际上有什么契约?我以为,layout() 调用 setX(),但不知何故,layout() 在调用 setX() 后停止工作。
view.layout(256, 256, 512, 512);
view.setX(0);
view.layout(256, 256, 512, 512);
但视图停留在 0, 256。为什么会这样?
【问题讨论】:
你的意思是onLayout(boolean, int, int, int, int)? 对不起,我的意思是布局(int,int,int,int) 【参考方案1】: view.layout(256,256,512,512)
的意思: 为视图及其所有后代分配大小和位置 这是布局机制的第二阶段。 (首先是测量)。在这个阶段,每个父级调用其所有子级的布局来定位它们。这通常使用存储在度量 pass() 中的子度量来完成。 派生类不应覆盖此方法。具有子级的派生类应覆盖 onLayout。在这种方法中,他们应该在他们的每个孩子上调用布局。 参数 l 左侧位置,相对于父级 吨 顶部位置,相对于父级 r 相对于父级的正确位置 b 底部位置,相对于父级
而view.getX()
此视图的视觉 x 位置,以像素为单位。这相当于translationX 属性加上当前的left 属性。 退货 此视图的视觉 x 位置,以像素为单位。
希望这是有道理的......
【讨论】:
【参考方案2】:在我的理解中,child.layout(Int,int ,int ,int)
用于确定孩子有多大。在绘制布局之后。你正在设置X
位置以保持在那里..所以它保持 x 位置的大小。
【讨论】:
以上是关于View 的 setX()、setY() 和 layout()的主要内容,如果未能解决你的问题,请参考以下文章