定义了默认外观,大小和控件定位,节省许多从整个窗口.xml文件复制控件属性。例如,你可以设置大小和texture用于按钮控件,从而使得在皮肤文件的其余部分,不需要再注意这些细节,除非你想覆盖一个特定的默认窗口的外观或大小等。

非常有价值的,因为它可以在构建皮肤的时候让你极大的简化了很多的工作。一方面,这意味着,一旦你有包含文件设置,许多对不同的分辨率的默认参数,可通过只改变对不同分辨率的文件之内的参数进行。

让你拥有专用于一组特定属性的包含文件。

   一个include的文件布局如下:

<?xml version="1.0" encoding="UTF-8"?>
  <includes>
    <include name="whitetext">
      <textcolor>ffffffff</textcolor>
    </include>
    <include file="listdefaults.xml" />
    <include condition="Skin.HasSetting(extras) file="includes_extras.xml" />
    <default type="button">
      <include>whitetext</include>
    </default>
    <constant name="leftedge">50</constant>
  </includes>




    你会注意到在上面的例子中有四个不同的include, 第一个<include>标签基本上允许它下面的标签替代它。例如,你有一个这样的window.xml

<control type="togglebutton">
    <include>whitetext</include>
    ... other tags go here
  </control>


    它将代替include标签地方的<textcolor>标签,你可以定义任意多的include, 和include里面任意多的标签,甚至复杂的control,或者复杂的control组。

    例子中的第二个<include>标签展示了如何从不同的文件中包含。由于没有指定include的名字,这个地方将包含整个文件的内容。

不同之处在于它可以用来在类型的每个控制 - 即使你不指定该控件是使用includes。因此,每一个buttoncontrol将有whitetext包括在里面。请注意,您可以通过在buttoncontrol指定<textcolor>标签覆盖。

    最后, <constant> 标签允许你通过名称定义一个数字(浮点)常量,用于代替数值(<left>, height="" etc.),否则就使用数值。

5.1在 includes里面使用参数

只是让你不必为了改变只是一个或两个值,复制/粘贴大块的XML。include现在大约相当于编程语言“程序”。以下是已列入kodi最新的语法。

   include的定义依然写在include标签之内,但是现在可以接受参数:

<include name="MyControl">
    <param name="id"/>
    <param name="left" default="120"/>
    <param name="top">225</param>
    <definition>
        <control type="image" id="$PARAM[id]">
            <left>$PARAM[left]</left>
            <top>$PARAM[top]</top>
            <width>370</width>
            <height>40</height>
            <texture>foo.png</texture>
        </control>
    <definition>
</include>


    这里,第一部分被称为参数列表,并使用<param>标记中指定。当它存在,包括机身后面应该<定义>标记括起来。此刻,参数表是可选的,主要用于为参数指定的默认值(例如上面的120和225),但在其他方面并非强制性的。

上面的include可以这样被调用:

<include name="MyControl">
    <param name="id" value="52"/>
    <param name="left">300</param>
</include>

下面这样写有完全相同的效果:

<include name="MyControl">
    <control type="image" id="52">
        <left>300</left>
        <top>225</top>
        <width>370</width>
        <height>40</height>
        <texture>foo.png</texture>
    </control>
</include>

可以这样被调用:

<include>MyControl</include>

   并没有额外的好处。

   在新的include调用中,任何合适的值都可以作为参数被传递,包括$INFO 标签,$LOCALIZE,$VARs, constants等。空字符也可以被传递,例如重写一个设置include 定义的非空默认值。

并扩展到通过任一实际值(如果它被传递),默认值(如果设置)或空字符串,在该顺序。

宗旨指定,但在其他方面没有必要,可以省略。

   这真是一个风格问题,而有些人可能更喜欢写明确的参数列表来指定在include内所引用的所有参数。这是一个很好的做法,因为明确的参数列表可能在Kodi的未来版本将更好的利用。

如果没有<param>标记可言,<definition>可省略。这将使得语法更短:

<include name="MyControl">
    <control type="image" id="$PARAM[id]">
        <left>$PARAM[left]</left>
        <top>$PARAM[top]</top>
        <width>370</width>
        <height>40</height>
        <texture>foo.png</texture>
    </control>
</include>



    include可以调用其他(嵌套)include,甚至传递他们已经有了自己的确切参数值。这就是所谓的参数转发。

<include name="MyControl">
    ...
    <include name="MyOtherControl">
        <param name="label">$INFO[Player.Title]</param>
        <param name="label2" value="x:$PARAM[left]; y:$PARAM[top]"/>
        <param name="color" value="$PARAM[color]"/>     <!-- forwarding -->
        <param name="id" value="$PARAM[scrollbarid]"/>  <!-- forwarding -->
    </include>
    ...
</include>


    这里,$ PARAM[颜色]和$PARAM[scrollbarid]将被转发到MyOtherControl,只有当参数颜色和scrollbarid实际上已经传递到MyControl,否则颜色和ID(如果设置MyOtherControl)的默认值将被使用在MyOtherControl里面。包含其它字符(如LABEL2)复合值不被视为“真正的”转发,并始终覆盖在嵌套设置包括任何默认值,即使他们扩大为空字符串。


5.2 Variables


   Variables使其更易于使用有条件的infolabels。可以在Includes.xml定义它们,或使他们分离的,则可以将它们放置在它包含在Includes.xml另一个文件。您可以通过添加这样一行包括Includes.xml一个文件:


<include file="Variables.xml" />

  Variables 可以用在任何支持 infolabels的标签中使用,如 texture, label和任何可见标签。

而不必包括符合条件整整两个controls,它们允许你只应用条件的实际texture or label。这意味着维护更少的control等。在变量的值被读出从上到下并且满足被使用的第一个条件。最后的值通常没有条件,它的内容作为后备。下面的例子显示专辑标签,如果玩家有音频,当年如果没有音讯,没有回退,使用(因为无论是或不是任何音频)。

<variable name="Example">
        <value  condition="Player.HasAudio">$INFO[ListItem.Album]</value>
        <value  condition="!Player.HasAudio">$INFO[ListItem.Year]</value>
        <value>-</value>
</variable>

   你可以在control标签中这样使用variable


<label>$VAR[Example]</label>


或者当变量值可能包含逗号(,)和/或引号(“):

<label>$ESCVAR[Example]</label>

5.3 Constants

如果你想多次重复使用某个值在你的skin,您可以为它定义一个constant

<constant name="FanartCrossfadeTime">300</constant>
<constant name="IconCrossfadeTime">300</constant>

现在你可以在任何地方通过名字引用此值:

<control type="image">
        <left>0</left>
        <top>0</top>
        <width>256</width>
        <height>256</height>
        <texture background="true">$INFO[ListItem.Icon]</texture>
        <fadetime>IconCrossfadeTime</fadetime>
</control>

5.4 Defaults


每一个控件类型,您可以定义默认模板。比如这里有一个按钮控件模板:

<default type="button">
        <left>0</left>
        <top>0</top>
        <width>700</width>
        <height>40</height>
        <label>-</label>
        <texturefocus border="20">list-focus.png</texturefocus>
        <texturenofocus border="20">list-nofocus.png</texturenofocus>
        <font>font20</font>
        <textcolor>white</textcolor>
        <focusedcolor>blue</focusedcolor>
        <disabledcolor>darkgrey</disabledcolor>
        <invalidcolor>red</invalidcolor>
        <textoffsetx>10</textoffsetx>
        <aligny>center</aligny>
        <pulseonselect>true</pulseonselect>
</default>

定义缺省值的好处是,Kodi将可以在任何地方使用模板,当按钮被使用,所以你不必全部为每个按钮的标签编码。你只需要编你想从默认模板。