【问题标题】:Create a reusable layout style uibinder创建一个可重用的布局样式 uibinder
【发布时间】:2015-04-07 08:12:25
【问题描述】:

我想创建一个布局 uibinder 以在其他 uibinder 中使用。

我有一个我经常使用的布局模式,里面有很多 html,还有一个放置内容的地方。我想创建一个 uibinder 并将所有与布局相关的 html 放入其中,然后在我的其他 uibinder 中使用此 uibinder(称为<my:myHTMLPanel>)并从 xml 文件中提供其内部 html,如下所示:

<my:myHTMLPanel>
    Hello world(+other wigets or html)
</my:myHTMLPanel>
<my:myHTMLPanel>
    How are you
</my:myHTMLPanel>?

这可能吗?

【问题讨论】:

    标签: gwt uibinder


    【解决方案1】:

    在您的自定义小部件“myHTMLPanel”中,您可以添加此功能:

    @UiChild
    public void addContent(Widget content) {
        // add the content in your custom widget
    }
    

    然后你可以像在 ui.xml 部分那样使用它:

    <my:myHTMLPanel>
        <my:content>
            <g:HTML> Hello world </g:HTML>
        </my:content>
    </my:myHTMLPanel>
    

    【讨论】:

      【解决方案2】:
      <!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
      <ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
          xmlns:g="urn:import:com.google.gwt.user.client.ui">
          <ui:style>
          .VCenter {
              vertical-align: middle;
          }
          </ui:style>
          <g:HTMLPanel styleName="{style.VCenter}" ui:field="Wrapper">
              <table class="{style.VCenter}" width="100%" valign="middle" border="0" ui:field="Table">
                  <tr class="{style.VCenter}" valign="middle">
                      <td class="{style.VCenter}" valign="middle">
                          <g:HTMLPanel styleName="{style.VCenter}" ui:field="Container"></g:HTMLPanel>
                      </td>
                  </tr>
              </table>
          </g:HTMLPanel>
      </ui:UiBinder> 
      
      
      package package;
      
      import java.util.Iterator;
      
      import com.google.gwt.core.client.GWT;
      import com.google.gwt.dom.client.Style.Unit;
      import com.google.gwt.dom.client.TableElement;
      import com.google.gwt.event.dom.client.ClickEvent;
      import com.google.gwt.event.dom.client.ClickHandler;
      import com.google.gwt.event.dom.client.HasClickHandlers;
      import com.google.gwt.event.shared.GwtEvent;
      import com.google.gwt.event.shared.HandlerManager;
      import com.google.gwt.event.shared.HandlerRegistration;
      import com.google.gwt.uibinder.client.UiBinder;
      import com.google.gwt.uibinder.client.UiChild;
      import com.google.gwt.uibinder.client.UiConstructor;
      import com.google.gwt.uibinder.client.UiField;
      import com.google.gwt.user.client.ui.HTMLPanel;
      import com.google.gwt.user.client.ui.HasWidgets;
      import com.google.gwt.user.client.ui.IsWidget;
      import com.google.gwt.user.client.ui.Widget;
      
      public class VCentered implements HasWidgets, IsWidget, HasClickHandlers {
      
          private static VCenteredUiBinder uiBinder = GWT
                  .create(VCenteredUiBinder.class);
      
          interface VCenteredUiBinder extends UiBinder<Widget, VCentered> {
          }
      
          HandlerManager handlerManager;
          @UiField HTMLPanel Container;
          @UiField HTMLPanel Wrapper;
          @UiField TableElement Table;
      
          public void setHeight(String height) {
              Table.getStyle().setHeight(Integer.parseInt(height), Unit.PX);
          }
      
          public @UiConstructor VCentered(String height) {
              handlerManager = new HandlerManager(Container);
              uiBinder.createAndBindUi(this);
              setHeight(height);
          }
      
          @Override
          public Widget asWidget() {
              return Wrapper;
          }
      
          @UiChild
          public void addContent(Widget content) {
              Container.add(content);
          }
          @Override
          public void add(Widget w) {
              Container.add(w);
          }
      
          @Override
          public void clear() {
              Container.clear();
          }
      
          @Override
          public Iterator<Widget> iterator() {
              return Container.iterator();
          }
      
          @Override
          public boolean remove(Widget w) {
              return Container.remove(w);
          }
      
          @Override
          public void fireEvent(GwtEvent<?> event) {
              handlerManager.fireEvent(event);
          }
      
          @Override
          public HandlerRegistration addClickHandler(ClickHandler handler) {
              return Container.addDomHandler(handler, ClickEvent.getType());
          }
      }
      

      这是一个垂直居中高度未知的孩子的 uibinder

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-22
        相关资源
        最近更新 更多