我目前有这个 UI 结构:
Activity (ACT)
LinearLayout (LL)
HorizontalScrollView (HSV)
RelativeLayout (RL)
当我设置 RL 的布局参数时,它们直到后来才被应用,那时为时已晚。
var TotalWidth = GetNewWidth() // eg returns 1000...
var lp = this.LayoutRoot.LayoutParameters;
lp.Width = TotalWidth;
this.LayoutRoot.LayoutParameters = lp;
// this.LayoutRoot.LayoutParameters.Width == 1000
// this.LayoutRoot.Width == 0
this.LayoutRoot.RequestLayout();
this.LayoutRoot.ForceLayout();
this.RequestLayout();
this.ForceLayout();
// this.LayoutRoot.LayoutParameters.Width == 1000
// this.LayoutRoot.Width == 0
如果我不使用宽度,这不是问题,但我是:) 我想这样做:
this.ScrollTo(500, 0);
这不起作用,因为 HSV 子项的总宽度当前为 0。
但是,如果我这样做:
this.PostDelayed(() => this.ScrollTo((int) percent, 0), 500);
延迟 500 毫秒后,它起作用了。
HSV 是一个派生类,它自己管理其内容 - 只是一个空的 RL,我用它来设置宽度,以便我可以有一个巨大的区域来绘制图像。一种巨大的滚动画布。此外,我想要做的是在 HSV 的 OnSizeChanged 覆盖成员中。我想这样做,如果重新调整控件的大小,控件会滚动到相同的位置。宽度取决于高度(保持纵横比)