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 不同步的主要内容,如果未能解决你的问题,请参考以下文章

如何使用虚拟键盘写入焦点输入?

虚拟机密码忘记了怎么办

虚拟键盘激活时的屏幕样式

WPF虚拟键盘如何不获得当前焦点

iOS 关闭/收起虚拟键盘的若干方法

ios 最新系统bug与解决——弹出键盘再收起时,原虚拟键盘位点击事件无效