在给定的表单上,我们将一个组件替换为另一个组件 .
原始组件是一系列TextFields,新表单是一些信息文本和一个按钮 . 我们隐藏第一个,并显示第二个(UI设计器在表单中有两个容器) .
我尝试使用带有各种值的 scrollRectToVisible
但它似乎与滚动没有任何区别 .
continueButtonContainer.setHidden(false);
f.forceRevalidate();
Button continueButton =
(Button)StateMachine.GetInstance().findByName("ButtonContinue", f);
f.scrollComponentToVisible(continueButtonContainer);
f.scrollComponentToVisible(continueButton);
我期待继续按钮靠近屏幕顶部 .
如果在显示继续按钮之前滚动屏幕,则按钮会在屏幕底部结束(在我放入 scrollComponentToVisible
行之前它位于屏幕底部下方 .
用户滚动屏幕后,按钮会上升到需要的位置,然后停留在那里 .
如果屏幕未滚动,则按钮将显示在应有的位置 .
我知道我可以在按钮下方添加一些隐形容器并强制它们进入屏幕,但我宁愿有一个更强大的解决方案 .
1 回答
这有一些问题 . 首先,您使用
forceRevalidate
,应该在非常罕见的情况下使用 .第二,似乎你在
Form
上调用它,这有点误导 . 虽然看起来:将一个组件添加到表单中,它实际上是一个同义词:
这很重要,因为你需要在可滚动的容器上调用
scrollComponentToVisible
,它实际上可以完成工作,理想情况下是所述组件的直接父级 . 我'm assuming it'是您案例中的内容窗格,但它取决于布局等 .最后一部分是让布局完成它的工作 . 如果您在表单显示之前调用它,则可能无效 . 请注意,在调用
show
之后执行此操作毫无意义,因为表单可能需要一段时间才能进行转换 . 您可以使用show listener或覆盖laidOut
回调方法来执行此类操作 .