DisclosurePanel + 虚拟键盘时 ScrollPanel 不同步
Posted
技术标签:
【中文标题】DisclosurePanel + 虚拟键盘时 ScrollPanel 不同步【英文标题】:ScrollPanel out of sync when DisclosurePanel + Virtual Keyboard 【发布时间】:2015-05-01 16:47:07 【问题描述】:我无法在 (mgwt) ScrollPanels 和 (gwt) DisclosurePanels 上使用(例如 android)虚拟键盘找到解决方案。
在使用移动虚拟键盘向 DisclosurePanel 内的文本字段输入数据后(虚拟键盘消失了),我的应用程序中的 ScrollPanel 与页面不同步。我无法滚动到页面顶部,页面末尾有一个空白区域代表虚拟键盘的大小。因此,可以滚动到页面末尾之外,但不能滚动到顶部。
这些页面通常有多个披露面板。当输入输入时页面上的所有此类面板都打开时,不会发生不同步的情况。如果在弹出时取消键盘(即没有输入),也可以保持正确的滚动。
UI Binder sn-p:
<mgwt:panel.scroll.ScrollPanel ui:field="ascroll">
<mgwt:panel.flex.FlexPanel>
<mgwt:header.HeaderPanel>
<mgwt:header.HeaderTitle ui:field="atitle"/>
</mgwt:header.HeaderPanel>
<gwt:DisclosurePanel >
<gwt:customHeader>
<mgwt:header.HeaderPanel
<mgwt:header.HeaderTitle ui:field="anothertitle"/>
</mgwt:header.HeaderPanel>
</gwt:customHeader>
<mgwt:panel.flex.FlexPanel>
<mgwt:form.Form>
<mgwt:form.FormEntry>
<mgwt:input.MTextBox ui:field="afield"/>
</mgwt:form.FormEntry>
</mgwt:form.Form>
</mgwt:panel.flex.FlexPanel>
</gwt:DisclosurePanel>
</mgwt:panel.flex.FlexPanel>
</mgwt:panel.scroll.ScrollPanel>
我在 ScrollPanel 上使用 refresh
来打开/关闭 DisclosurePanel。工作正常。我也尝试在字段的onChange
/onFocus
事件中执行refresh
,但无济于事。
ViewPort 设置为以下(也尝试/使用了默认getAppSetting()
):
ViewPort viewPort = new MGWTSettings.ViewPort();
viewPort
.setWidthToDeviceWidth()
.setHeightToDeviceHeight()
.setUserScaleAble(false)
.setMinimumScale(1.0)
.setMinimumScale(1.0)
.setMaximumScale(1.0);
MGWTSettings settings = new MGWTSettings();
settings.setViewPort(viewPort);
settings.setFullscreen(true);
settings.setFixios71BodyBug(true);
settings.setPreventScrolling(true);
MGWT.applySettings(settings);
对我可以做些什么来确保滚动与页面大小同步有什么建议吗?
【问题讨论】:
【参考方案1】:我最终屈服并用 GWT ScrollPanel 替换了 MGWT ScrollPanel。需要一些移动 CSS 修补,但工作正常。
【讨论】:
以上是关于DisclosurePanel + 虚拟键盘时 ScrollPanel 不同步的主要内容,如果未能解决你的问题,请参考以下文章