首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >GWT响应式设计方案

GWT响应式设计方案
EN

Stack Overflow用户
提问于 2013-06-03 15:58:19
回答 4查看 8K关注 0票数 2

我正在使用GWT来制作web应用程序,但是现在我需要在响应式设计中制作我的web应用程序,但是GWT不支持响应式设计,请帮助我。

EN

回答 4

Stack Overflow用户

发布于 2013-06-03 16:04:37

GWT支持响应式设计,就像任何其他小部件工具包一样(好吧,这并不完全正确,可能有一些小部件工具包做得更好):使用HTMLPanelFlowPanelSimplePanel和响应式CSS进行布局,或者使用布局面板进行活动布局并在代码中(或在自定义布局面板中)进行计算。

票数 3
EN

Stack Overflow用户

发布于 2014-11-10 05:32:51

您可以使用CSS媒体查询来响应您的布局。

例如,在屏幕尺寸高达640px的设备上,要使对话框占据90%的可用水平空间,可以将样式包装在@media块中,如下所示:

代码语言:javascript
运行
复制
@media all and (max-width: 640px) {
  .gwt-DialogBox {
    width: 90%;
  }
}

不幸的是(到目前为止) GWT编译器不支持media CSS,因此如果您将其与CssResource结合使用,上面的代码将会失败。

解决此问题的方法之一是将CSS资源拆分为两个文件。所有默认的(桌面) CSS样式将转到第一个文件(例如main.css),而您所有的移动覆盖将转到第二个文件(例如mobile.css)。

请注意,您希望覆盖移动端的样式名称需要在main.css中标记为@external,以避免gwt编译器混淆名称。

main.css:

代码语言:javascript
运行
复制
@external .mainNorthPanel;

.mainNorthPanel {
  position: fixed;
  top: 0px;
}

mobile.css:

代码语言:javascript
运行
复制
@media all and (max-width: 640px) {
  .mainNorthPanel {
    position: absolute;
    top: -3em;
  }
}

在应用程序ClientBundle中,将main.css与CssResource接口结合使用,并将移动文件定义为外部资源:

代码语言:javascript
运行
复制
public interface MyBundle extends ClientBundle {

    public interface MainStyles extends CssResource {
      String mainNorthPanel();
    }

    @Source("css/main.css")
    MainStyles css();

    @Source("css/mobile.css")
    TextResource mobile();
}

最后,在模块初始化的某个地方注入外部CSS资源:

代码语言:javascript
运行
复制
String mobileCss = myBundle.mobile().getText();
StyleInjector.injectAtEnd(mobileCss)

有关完整的工作示例,请查看最近发布的这篇JavaWorld帖子:

http://www.javaworld.com/article/2842875/java-web-development/responsive-web-design-with-google-web-toolkit.html

它涵盖了一些基本概念,如基于css的响应式视图、对话框和菜单。在github上有一些概念的证明:

https://github.com/cuppafame/gwt-responsive

票数 3
EN

Stack Overflow用户

发布于 2013-06-03 19:16:37

除了托马斯所说的之外,你还可以研究一下gwt-bootstrap。他们有一个自定义的DataGrid小部件,可以根据断点(平板电脑、手机等)显示或隐藏。

如果您实际上希望根据可用大小隐藏和显示列,则可以扩展DataGrid并执行以下操作:

代码语言:javascript
运行
复制
ResponsiveDataGrid extends DataGrid<myDTO> {

        private final Column<myDTO,String> column1;
        private final Column<myDTO,String> column2;
        private Boolean isCompact;


        public ResponsiveDataGrid(int pageSize, Resources resources,ActionCell.Delegate<myDTO> actionDelegate) {
            super(pageSize, resources,new EntityProxyKeyProvider<myDTO>());
            initColumns();
        }


        private void initColumns() {
            // init your columns
        }

        private void updateColumns() {
            int columnCount = getColumnCount();
            for (int i =columnCount-1;i>=0;i--) {
                removeColumn(i);
            }
            removeUnusedColGroups();
            if (isCompact)  {
                // show columns for compact size

            }
            else {
               // show all columns
            }
        }

        @Override
        protected int getRealColumnCount() {
            return getColumnCount();
        }

       // WORKAROUND for some sizing issues in DataGrid
       private void removeUnusedColGroups() {
            int columnCount = getColumnCount();
            NodeList<Element> colGroups = getElement().getElementsByTagName("colgroup");

            for (int i = 0; i < colGroups.getLength(); i++) {
                Element colGroupEle = colGroups.getItem(i);
                NodeList<Element> colList = colGroupEle.getElementsByTagName("col");

                for (int j = colList.getLength()-1;j>=0; j--) {
                    colGroupEle.removeChild(colList.getItem(j));
                }
            }
        }


        @Override
        public void onResize() {
            super.onResize();
            if (!isAttached()) {
                return;
            }
            // or whatever breakpoint you want to support
            boolean isNewCompact = (getOffsetWidth() < 800);
            if (isCompact == null || isNewCompact != isCompact) {
                isCompact = isNewCompact;
                updateColumns();
            }
        }
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16892304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档