xbmc自己定制皮肤

1 剖析皮肤
XBMC的皮肤打包放置在XBMC主目录的 addon/目录下,命名形如 skin.confluence。所有的皮肤都放置在上面的目录中。
任何额外的皮肤:你创建的,或者是从诸如 www.xboxskins.net 这些地方下载的,都可以放在上面的目录中,然后XBMC可以在用户界面->设置(Appearance Settings)自动检测加载。如果你想开发自己的皮肤,一个比较好的建议是,复制一个现存的皮肤重命名(例如 addon/skin.myskin),然后你尝试修改每个文件,这样你就可以熟悉整个皮肤系统了。

每个皮肤目录包含几个子目录和一个文件:

MySkin/fonts
这个子目录包含皮肤中用到的所有字体文件,在这里,你可以增加或者替换字体。
MySkin/media
这个子目录包含所有的媒体文件(.png/.gif/.jpg...),可以依据个人喜好替换/编辑这些文件。

MySkin/addon.xml
XBMC从这个文件中获取如何找到皮肤中用到的其他文件的信息。这个文件还包含开发人员信息和版本信息。

MySkin/720p

这是一个特定分辨率的目录。XBMC可以运行于不同的显示分辨率,可能在不同分辨率下用到不同的文件(这是因为对于720x480的NTSC分辨率和1920x1080的1080i分辨率来说,在显示上有很大不同的)。 我们另文 “How Window XML Files Are Found”(http://wiki.xbmc.org/index.php?title=Skin.xml#How_window_xml_files_are_found)介绍XBMC是按什么优先顺序来读取不同分辨率皮肤文件的。

2 皮肤主题
一个皮肤中用到的所有基本的媒体文件都应该压缩到Textures.xbt文件中,并存放到media/目录。你可以用TexturePacker工具来完成这个工作。默认皮肤主题使用的所有图片文件都应该在Textures.xbt文件中。

此外,media/目录中允许有其他 .xbt 文件,每个文件对应不同的皮肤主题。例如,你可以把皮肤的主要纹理贴图文件色调做成红色的,然后创建一个新的主题媒体文件压缩包Red.xbt ——这使得对于一个皮肤,用户能选择更多的显示效果。要记住变更皮肤主题只是使用了不同的纹理贴图文件——皮肤的显示布局不变。用户选定一个皮肤主题后,当某个控件需要用到纹理贴图时,XBMC会先到 <主题名称>.xbt 文件中去找。如果<主题名称>.xpr中没有这个图片文件,它会自动退回到Textures.xbt 文件中读取。也就是说皮肤主题的.xbt文件中只需要包含修改过的纹理贴图文件-所有其他纹理贴图可以使用Textures.xbt。

建议用下面的方法建立皮肤主题:
1. 在保存默认纹理贴图文件的目录运行TexturePacker.exe生成Textures.xbt 。
2. 确定制作新皮肤主题时要修改的纹理贴图并把它们拷到一个单独目录中。
3. 在正常的皮肤工作区之外为每个皮肤主题建立单独的目录,然后把针对这些主题修改过的纹理贴图存到里面。
4. 在步骤3建立的每个皮肤主题目录上运行TexturePacker.exe来生成皮肤主题的 .xbt 文件(注意:你可以使用-output参数指定适当的文件名)。
5. 把Textures.xbt和每个皮肤主题的.xbt文件都存放到你的皮肤的media/目录中,XBMC就能自动找到它们了。

3 包含文件
另一个特殊的(甚至可说是最重要的)皮肤文件是includes.xml。这个文件正如其名,是定义皮肤中控件的默认外观、大小、位置的地方,它使你在窗口xml文件中不用反复复制不同控件中用到的相同属性设置。例如,你可以设置一个按钮控件的大小和使用的纹理贴图,这样你在其他皮肤文件中就不用重复设置这些详细信息了,除非你在某个特定的窗口中有特殊要求而需要更改默认的外观或大小等属性。

这是非常有用的,因为它大大减少了皮肤开发的工作量。此外,使用包含文件意味着只要在不同显示分辨率的包含文件中调整参数就能很方便地支持不同分辨率了。

包含文件的文件结构如下所示:

<includes>

     <include name="whitetext">

       <textcolor>ffffffff</textcolor>

     </include>

     <include file="listdefaults.xml" />

     <default type="button">

       <include>whitetext</include>

     </default>

     <constant name="leftedge">50</constant>

</includes>

从上面的中可以看到,有4个不同类型的包含。第一个 <include> 标签定义的内容会在这个包含名称被引用时插入到引用位置。例如,如果在一个窗口的 .xml 文件中这样写:  <control type="togglebutton">

    <include>whitetext</include>

... other tags go here

</control>

包含标签中定义的<textcolor>标签就会被插入到引用位置。你可以使用多个包含的引用,同时一个包含定义中可以有很多标签内容——甚至可以是一个完整的控件定义或控件组定义。

例子中第二个<include>标签演示如何引用不同文件中的内容。由于没有指定包含名称,这将把整个文件内容插入到引用位置。

<default>标签类似于包含,不同的是它的内容会被同类型的所有控件所引用——如果你没有明确说明空间不使用这个包含的话。在上面的例子中每一个buuton控件都会引用whitetext包含。当然,你可以通过在按钮控件中定义<textcolor>来覆盖这个默认定义。

最后,使用<constant>标签可以定义数值常量(浮点数),这样就可以使用常量名称而不是直接使用数值(<posx>, height="" 等)。这利于使用统一的位置值,也方便调整这些数值,不用每个地方去改了。

猜你喜欢

转载自lafecat.iteye.com/blog/1929233
今日推荐