以下是面对我的问题的代码示例。
Container master, content;
Button lockButton;
void layout () {
master = new Container (new LayeredLayout ());
content = new Container (BoxLayout.y());
content.setScrollableY (true);
lockButton = new Button ("");
lockButton.setUIID ("ButtonInvisible");
lockButton.addActionListener ((e)->{
unlock ();
});
master.add(content);
}
void lock () {
master.add(lockButton);
}
void unlock () {
lockButton.remove ();
}
ButtonInvisible 已选择,未选中和已按下样式相同。
问题描述:
content
lock()
content
(lockButton
拦截点击)content
的滚动为0,在发布时它会返回上一个数量。我想这是因为Button会在点击时更改它的样式,这会导致重新绘制/重新验证基础内容的错误。
根据Diamond的回答更新
其他信息:
容器master
是SwipeableContainer
的核心部分。
只要打开lock()
,就会调用方法SwipeableContainer
。
如果我在revalidate()
打开时调用SwipeableContainer
- 屏幕奇怪地闪烁,但行为没有改变 - 只要按下按钮,滚动仍然会跳到零。
可能很重要 - 容器Tabs
content
个组件
在此版本的代码中,重新验证不能成为此类问题的原因,因为没有添加或删除任何组件,但问题仍然相同。
Container master, content;
Button lockButton;
void layout () {
master = new Container (new LayeredLayout ());
content = new Container (BoxLayout.y());
content.setScrollableY (true);
lockButton = new Button ("");
lockButton.setUIID ("ButtonInvisible");
lockButton.addActionListener ((e)->{
unlock ();
});
lockButton.setFocusable(false);
master.add(content).add(lockButton);
}
void lock () {
lockButton.setFocusable(true);
}
void unlock () {
swipeableContainer.close ();
lockButton.setFocusable(false);
}
答案 0 :(得分:2)
问题在于,当您调用lock()
时未发生重新验证,因此lockButton
未正确布局,只有在您点击{{1}的任何部分时才能正确定位容器(滚动不适用)。
解决方案是在主要UI更改之后始终调用master
/ repaint()
或某种动画,例如在容器中添加和删除组件。
revalidate()
答案 1 :(得分:0)
这仅在模拟器中发生。在真实的设备上一切都很好。遗憾。