1

我有一个包含页眉页脚和主要内容槽的全局演示者,当页眉始终位于顶部时,页脚始终位于底部...

我的问题是:如何向我的 Global Presenter 添加滚动条?

我知道有很多这样的问题,但我找不到适合我的答案。

我有 UiBinder 有代码:

    <g:RootLayoutPanel width="100%" height="100%">
    <g:layer left="0px" right="0px" top="0px" bottom="0px">
        <g:DockLayoutPanel unit="EM">
            <g:north size="5.0">
                <g:HTMLPanel ui:field="headerContentPanel" />
            </g:north>
            <g:center size="1.0">
                <g:FlowPanel ui:field="mainContentPanel" />
            </g:center>
            <g:south size="1.5">
                <g:HTMLPanel ui:field="footerContentPanel" />
            </g:south>
        </g:DockLayoutPanel>
    </g:layer>
</g:RootLayoutPanel>

我试图添加包含 RootLayotPanel 或其他面板的 ScrollPanel。但所有内部面板的大小都为零。

我尝试在 scrollPanel 内使用垂直面板,但我不能将页脚放在底部。

有人有答案吗?

==================================================== =================================

我成功了,这是我的新代码:

    <g:RootLayoutPanel width="100%" height="100%">
    <g:layer>

        <g:ScrollPanel width="100%" height="100%">
            <g:DockPanel width="100%" horizontalAlignment="ALIGN_CENTER" verticalAlignment="ALIGN_MIDDLE">
                <g:Dock direction="NORTH" >
                    <g:HTMLPanel ui:field="headerContentPanel" />
                </g:Dock>
                <g:Dock direction="CENTER" verticalAlignment="ALIGN_MIDDLE" horizontalAlignment="ALIGN_CENTER">
                    <g:FlowPanel ui:field="mainContentPanel" />
                </g:Dock>
                <g:Dock direction="SOUTH"  verticalAlignment="ALIGN_BOTTOM" horizontalAlignment="ALIGN_CENTER">
                    <g:HTMLPanel ui:field="footerContentPanel" />
                </g:Dock>
            </g:DockPanel>
        </g:ScrollPanel>

    </g:layer>
</g:RootLayoutPanel>

但我有一个小问题:无论我尝试什么,我的页脚都没有连接到底部。有人知道解决方案吗?

4

2 回答 2

1

布局面板在滚动面板中无法正常工作。但是 scoll 面板可以在 Layout Panels 中使用:例如滚动中心部分:

    <g:DockLayoutPanel unit="EM">
        <g:north size="5.0">
            <g:HTMLPanel ui:field="headerContentPanel" />
        </g:north>
        <g:center size="1.0">

          <g:ScrollPanel>
            <g:FlowPanel ui:field="mainContentPanel" />
          </g:ScrollPanel>

        </g:center>
        <g:south size="1.5">
            <g:HTMLPanel ui:field="footerContentPanel" />
        </g:south>
    </g:DockLayoutPanel>

另一种可能性是使用 DockPanel 代替布局面板。

如果标题包含在滚动条中:

<g:ScrollPanel>   
   <g:DockPanel>
      <g:Dock direction="NORTH" height="100px">
          <g:HTMLPanel ui:field="headerContentPanel" />
      </g:Dock>
      <g:Dock direction="CENTER">
          <g:FlowPanel ui:field="mainContentPanel" />
      </g:Dock>
      <g:Dock direction="SOUTH" height="100px">
          <g:HTMLPanel ui:field="footerContentPanel" />
      </g:Dock>
  </g:DockPanel> 
</g:ScrollPanel>

然后把它放进去RootLayoutPanelRootPanel


或者在布局面板中使用 DockPanel。例如:我们希望有可滚动的标题和中心部分,但西面板和底部始终在视图中:

<g:DockLayoutPanel width="100%">
  <g:west size="100.0">
     <g:Label>West side </g:Label>
  </g:west>
  <g:center>
     <g:ScrollPanel>   
        <g:DockPanel>
          <g:Dock direction="NORTH" height="100px">
            <g:HTMLPanel ui:field="headerContentPanel" />
          </g:Dock>
          <g:Dock direction="CENTER">
            <g:FlowPanel ui:field="mainContentPanel" />
          </g:Dock>
        </g:DockPanel> 
     </g:ScrollPanel>
  </g:center>
  <g:south size="50">
     <g:HTMLPanel ui:field="footerContentPanel" />
  </g:south >
</g:DockLayoutPanel>

然后把这个放进去RootLayoutPanel

于 2012-05-07T13:13:38.667 回答
0

暂时忘记所有 GWT (UiBinder) 语法和所有级联布局。只需考虑这个简化的示例:

  • 我们有一个窗口,假设当前高度为 1000 像素。
  • 我们有一个占据 100% 窗口高度的容器(想象一下一个简单的黑盒子)——所以它的高度是 1000px。

在这种情况下,没有什么可以滚动的。因此,使用 scroll=auto 时,窗口上将没有滚动条。(忘记我们黑匣子内任何可能的滚动条。)


如果您想要一个标题保持在顶部的布局,而其他所有内容都滚动(滚动条占据 100% 高度),您可能应该从带有“position=fixed”的标题开始。因此,您将在 HTML 中执行以下操作:

<div class="headerContent">My header</div>
<div class="everythingElse">
   <div class="mainContent">...</div>
   <div class="footerContent">My footer</div>
</div>

CSS:

.headerContent {
  position: fixed;
  top: 0;
  left: 0;
  height: 5.0em;
  width: 100%;
  background-color: red;
}
.everythingElse {
  margin-top: 5.0em; /* Same as the height of the header */
}

您可以在 GWT UiBinder 中执行相同的操作。只需将 div 替换为简单的 FlowPanel(如果您愿意),然后应用 css(使用该addStyleNames属性引用的 UiBinder CSS 类)。不需要 DockPanel。当“everythingElse”的高度超过窗口高度时,body标签的默认设置显示滚动条。

于 2012-05-06T12:09:17.797 回答