百变锁屏

百变锁屏在主题包里的lockscreen/advance目录下,manifest.xml文件是描述脚本

<Lockscreen frameRate="" displayDesktop=""  showSysWallpaper="" screenWidth="1080">
<Image />
<Image />
<Unlocker/>
<Unlocker/>
<Time/>
<DateTime/>

<Text/>
</Lockscreen>

其中

frameRate           指定帧率,如果动画缓慢,可以指定小一点的值,省电。默认为30。  
displayDesktop 默认为false,透视到桌面功能,如果没有锁屏壁纸或者锁屏壁纸可以被移开或透明时可以看到桌面launcher或者是锁屏前的应用程序。可以完美实现WP7,Meego,阿里云等的解锁界面。
showSysWallpaper 默认为false,是否在锁屏界面显示桌面壁纸。开启后如果没有指定锁屏壁纸<Wallpaper/>,会将桌面壁纸作为锁屏的壁纸。
screenWidth 设定屏幕宽度标准。如果指定为1080,锁屏中所有元素的位置都按1080p的布局编写,720p、480p等分辨率的手机会自动进行缩放。


百变壁纸

百变壁纸在主题包的miwallpaper目录下,描述文件也是manifest.xml。根节点表示与百变锁屏基本一致:

<MiWallpaper frameRate="1" width="1080" height="1920" screenWidth="1080">
<Var/>
<Image/>
<Group/>

</MiWallpaper>
width	表示百变壁纸的宽度。
height 表示高度
wallpaper_offset_pixel_x 偏移的像素数 (0 ~ -1*屏宽)
wallpaper_offset_x 偏移百分比 (0 ~ 1.0)

要实现元素跟随手指滑动的效果,需要借助#wallpaper_offset_pixel_x,#wallpaper_offset_x 二者关系:#wallpaper_offset_x 屏宽 = -1#wallpaper_offset_pixel_x
滑动时: 在第一屏,wallpaper_offset_pixel_x = 0, wallpaper_offset_x = 0; 滑到最后一屏,wallpaper_offset_pixel_x = -1*屏宽,wallpaper_offset_x = 1.0

为了适配不同分辨率机型,建议使用#wallpaper_offset_x。建议的设计方式:
壁纸切成双屏宽 (屏宽指的是screenWidth)
壁纸定位:x=”-#wallpaper_offset_x 屏宽”
需要跟随滑动的元素定位:x=”-#wallpaper_offset_x
屏宽 + 相对壁纸的位置”


动态图标

动态图标在主题包icons\fancy_icons\目录下,每个动态图标是一个文件夹,文件夹的名字是对应的app包名。例如日历的动态图标是一个叫”com.android.calendar”的文件夹,里面包含manifest.xml描述文件

<Icon version="1" frameRate="" width="136" height="136" screenWidth="720" useVariableUpdater="" hideApplicationMessage="">
<Var/>
<Image/>
<Text/>
<DateTime/>

</Icon>
  • hideApplicationMessage: 默认false,屏蔽右上角的通知标志。

  • useVariableUpdater: 指定需要哪些系统变量,目前包括电量和时间,而且可以指定时间的更新周期,如果时间小工具每秒更新一次,需要指定更新周期为1秒,否则默认会每分钟更新一次。如果小工具或动态图标只显示日期,则每天更新一次,可以指定更新周期为1天。尽量选择较长的更新周期,以节约系统资源。
    目前支持的tag: Battery, DateTime.Day, DateTime.Hour,DateTime.Minute,DateTime.Second

    如果某个小工具不需要电量或时间变量,则需要使用useVariableUpdater=”none”,指定不做时间变量等更新。
    如果某个小工具显示系统电量并且显示根据时间每小时更换背景图片: useVariableUpdater=”Battery,DateTime.Hour”
    如果需要每秒进行多次刷新,可以直接使用frameRate


机型适配

一份manifest文件,可以同时运行在多个设备,只需要设置好在不同尺寸或密度的设备上使用的资源和缩放比例就可以了。
1.资源适配:

extraResources="sw1000-den320:den320:1.2,sw1000-den320::1.2,sw1000-den320-large:den320:1.2"

sw1000-den320:den320:1.2     在屏宽是1000密度是320的机型上,使用的是den320文件夹下的资源,并且放大1.2倍;
sw1000-den320::1.2                   在屏宽1000密度320的机型上,使用的是默认的资源,并且放大1.2倍)

extraResources="sw2000-den480:1.8,sw1000-den320-large:1.8"

这两句话中间都是只有一个冒号,意思是sw2000-den480的机型使用的资源就是在sw2000-den480这一同名文件夹下的资源,并且放大1.8倍)


2.布局适配:

extraScales="sw1000-den320:1.2,sw2000-den480-large:1.8"

适配原理

  1. 首先把你所有自定义中出现的den和sw做一个列表 (比如这里extraResources=”sw1440-den440::0.916, sw720-den320::0.667, sw480-den240::0.444”,涉及到的den有440, 320, 240, 再加上一个默认的480; sw有1440, 720, 480, 再加一个默认的1080(与den480对应) )
  2. 然后当你的主题放到一个设备上时,首先拿你的设备密度去上面的den列表中找,找到最贴近的一个,然后如果同样den有多个sw,那么再拿设备的屏宽去这几个sw中找最贴近的一个,这样就找到了最合适的swXXX-denXXX
  3. 最后,资源就取这个sw-den对应的目录下的资源,及缩放比例Sr。代码中数字的缩放比例就使用sw-den对应的Ss.
  4. 最最后,就是缩放比例
如果按密度缩放(即scaleByDensity="true"):   资源真正的缩放比例是Sr * 设备den / 找到的den,代码中的数字缩放比例是Ss * 设备den / 找到的den

如果按屏宽缩放(即scaleByDensity="false"): 资源真正的缩放比例是Sr * 设备sw / 找到的sw ,代码中的数字缩放比例是Ss * 设备sw / 找到的sw