在SOUI中使用布局模板

概要

注意:布局模板是SOUI 2.8.0.4 新增加的功能。之前版本不支持。

SOUI的listview等一系统控件支持通过模板来创建列表项,这里要说的模板不是指listview中的使用的列表项模板。

对于比较大的项目,在页面布局中可能会出现重复的布局结构,只是部分属性不一样。对于完全相同的布局,soui一直支持使用include属性来重复引用布局XML脚本。但是对于属性可能发生变化但整体布局一致的情况,在实现布局模板支持之前,除了在布局脚本中重复XML没有更好的办法。

有了布局模板,这样重复的布局就可以更好的解决了。

使用示例

我们先看一下demo中提供的例子。

首先是增加了一个values\template.xml文件,当然在uidef.xml里也加上:

<!--定义全局template对象-->
  <template src="values:template"/>

再打开template.xml:

<?xml version="1.0" encoding="utf-8"?>
<template>
  <g.block>
    <window name="{{name}}" layout="hbox" gravity="center">
      <window size="-1,-1" layout="hbox">
        <text text="name:" colorText="{{color}}" />
        <link.web text="{{text}}" href="{{text}}"/>
      </window>
      <img skin="skin_avatar"/>
    </window>
  </g.block>
</template>

在demo中我们通过template.xml的template元素定义了一个模板:g.block ,这里用"g."开头,代表这是一个全局的模板。有全局模板就会有局部模板,局部模板和全局模板定义类似,只是它定义在布局文件的SOUI节点下,和root节点平级即可,也可参考局部style,局部skin的设置。一个局部的模板只能在当前宿主窗口中有效。另外这里的名字可以随便写,不一定要以“g.”开头。

观察上面的模板,我们发现有3个字符串是“{{xxx}}”形式,这是布局的变量,将会在使用布局的时候被传递的实际参数替换。

再看一下在布局XML里如何引用这个模板:

<t:g.block size="-1,-1">
           <data name="tpl_soime" color="#ff0000" text="soime.cn!"/>
        </t:g.block>
        <t:g.block size="-2,-1">
           <data name="tpl_soui" color="#0000ff" text="ui520.cn"/>
        </t:g.block>

注意,SOUI使用“t:”这个名字空间来标识后面是一个模板调用。

模板调用后面的布局参数会覆盖模板的第一个子节点的布局参数。注意,一个模板应该只有一个布局根节点,多个布局根节点会被自动忽略。

在调用模板的XML节点必须有一个data子节点来存储参数值,这些参数会自动替换模板中对应的变量。

这就是整个模板使用过程。如果不使用模板,达到同样的效果,模板中的XML要重复写2次,使用模板后,xml结构会更简洁。

运行效果:

下面我们看看demo中的效果:

模板的使用方法完成。

启程软件 2019-03-14

原文地址:https://www.cnblogs.com/setoutsoft/p/10528519.html

时间: 2024-11-15 00:37:44

在SOUI中使用布局模板的相关文章

在SOUI中使用网格布局

在实现网格布局前,SOUI支持两种布局形式:相对布局,和线性布局,其中线性布局是2017年2月份才支持的布局. 这两年工作都在Android这里,Android里有号称5大布局(RelativeLayout, LinearLayout, FrameLayout, GridLayout,TableLayout). FrameLayout很简单,在SOUI里一般用TabCtrl就实现了.RelativeLayout和SOUI自己的相对布局功能类似,线性布局也有了,但是一直没有实现GridLayout

第五篇:在SOUI中使用XML布局窗口

窗口布局的概念 每一个UI都是由大量的界面元素构成的,在Windows编程,这些界面元素的最小单位通常称之为控件. 布局就是这些控件在主界面上的大小及相对位置. 传统的布局一般使用一个4个绝对坐标来定义一个控件在主窗口的位置.对于窗口是固定大小的界面来说,这种方式是最简单有效的. 然而问题在于在Windows系统上编程,基本上很少有程序的窗口是固定大小的,用户希望它的窗口能够随时调整大小.调整大小后界面里的控件还能够按照一定的规则进行重排. 我自己最讨厌的就是在WM_SIZE里重排控件位置. 随

在SOUI中使用线性布局

SOUI 2.5.1.1开始支持线性布局(LinearLayout). 要在SOUI布局中使用线性布局, 需要在布局容器窗口里指定布局类型为vbox | hbox, (vbox为垂直线性布局, hbox为水平线性布局). 在指定布局类型后还可以为容器窗口指定gravity属性, 用来指定子窗口的默认排列模式. vbox的gravity有:left(默认), center, right, hbox有: top(默认), center, bottom. 在线性布局中的子窗口pos属性没有意义, 一般

借助 SIMD 数据布局模板和数据预处理提高 SIMD 在动画中的使用效率

原文链接 简介 为发挥 SIMD1 的最大作用,除了对其进行矢量化处理2外,我们还需作出其他努力.可以尝试为循环添加 #pragma omp simd3,查看编译器是否成功进行矢量化,如果性能有所提升,则达到满意状态. 然而,可能性能根本不会提升,甚至还会降低. 无论处于何种情况,为了最大限度发挥 SIMD 执行的优势并实现性能提升,通常需要重新设计算法和数据布局,以便生成的 SIMD 代码尽可能高效. 另外还可收到额外的效果,即标量(非矢量化)版代码会表现得更好. 本文将通过一个 3D 动画算

第二十三篇:在SOUI中使用LUA脚本开发界面

像写网页一样做客户端界面可能是很多客户端开发的理想. 做好一个可以实现和用户交互的动态网页应该包含两个部分:使用html做网页的布局,使用脚本如vbscript,javascript做用户交互的逻辑.当需求变化时,只需要在服务端把相关代码调整一下,用户即可看到新的内容(界面). 传统的客户端程序开发流程和网页开发可能完全不同. 首先是界面的布局,在老式的界面布局过程中,程序员先在界面上放好各种控件,然后需要自己通过相应的代码来维护界面在不同状态下控件的显示状态及位置.当界面中元素很多时,单纯布局

第二十二篇:在SOUI中使用代码向窗口中插入子窗口

使用SOUI开发客户端UI程序,通常也推荐使用XML代码来创建窗口,这样创建的窗口使用方便,当窗口大小改变时,内部的子窗口也更容易协同变化. 但是最近不断有网友咨询如何使用代码来创建SOUI子窗口,特此在这里统一解答. 要回答这个问题,首先要了解SOUI窗口创建及布局的流程. 先从swnd.cpp里抄一段创建子窗口的代码: 1 BOOL SWindow::CreateChildren(pugi::xml_node xmlNode) 2 { 3 TestMainThread(); 4 for (p

一个在SOUI中加速自适应大小的控件更新的小技巧

在SOUI中的控件有指定大小和自适应大小两类控件. 指定大小的控件,在控件内容更新时不需要重新布局,而自适应大小的控件在内容变化后会导致父窗口重新布局. 最近有网友发现在高速批量更新一个窗口的自适应控件(如50次/S的速度批量更新30个文件控件)时,SOUI的性能很低. 跟踪发现导致这个问题的关键在于在一次刷新过程中,每更新一个控件就需要执行一次重新布局,显而易见,这种情况下效率是非常低的. 解决这个问题的方法有两种: 一个简单的方法就是将自适应大小的文本控件改成固定大小的文本控件,如此,在定时

WebPart中使用Nvelocity模板引擎来进行呈现

WebPart中使用Nvelocity模板引擎来进行呈现 分类: SharePoint2011-06-15 08:29 1479人阅读 评论(1) 收藏 举报 模板引擎encodingsharepointxml测试css NVelocity是一套强大的模板引擎,在我之前的随笔中,有过使用它来呈现页面及生成静态页的例子.通过使用它,我们可以达到界面与数据的完成分离(当然需要一些设计手段来支持).我在公司里的工作主要就是在office sharepoint2007的基础上进行一些类型信息系统的门户站

第九篇:在SOUI中使用多语言翻译

为UI在不同地区显示不同的语言是产品国际化的一个重要要求. 在SOUI中实现了一套类似QT的多语言翻译机制:布局XML不需要调整,程序代码也不需要调整,只需要为不同地区的用户提供不同的语言翻译文件即可. 在SOUI中,我们实现了一个使用明文XML的语言翻译模块:translator.dll 为了使用多语言翻译,首先需要准备一个语言翻译的XML文件.demo中使用的翻译文件如下: <?xml version="1.0" encoding="utf-8"?>