原文:[GUIDE] Apex Launcher Theme Tutorial
译者按
Apex Launcher是一款是一款安卓4.0及以上系统的高质量启动器.个人感觉他已经超越了Go桌面,更重要的是他没有广告.
Apex Launcher的功能非常多,并且都可以自主设置.更关键的是Apex Launcher可以自定义主题.
这款桌面已经在GooglePlay上架了,如果你没有GooglePlay,也可以在这里下载最新版.
简介
本教程可以帮你开始创建自己的 Apex Launcher 主题。 因为主题是打包并分布在APK的文件结构里,为了制作主题,你需要知道基础的Android应用开发。
工作环境
(就是Android一般开发环境——译者注)
在你开始之前,你需要设置好你的开发环境。请按照顺序安装如下的必需软件。
JDK 6
http://www.oracle.com/technetwork/ja...ads/index.html
Android SDK
http://developer.android.com/sdk/index.html
Eclipse IDE
http://www.eclipse.org/downloads/
ADT Plugin for Eclipse
http://developer.android.com/sdk/eclipse-adt.html
如何安装这些开发者工具并不在本教程的范围。如果你想要获取更多的细节,请确认你读过并遵从上述链接中的介绍。
创建主题
Apex Launcher支持其主题引擎中不同的组件。包括可以替换桌面、dock和抽屉中应用图标的图标包。允许自定义桌面(Launcher)自身的的外观的Apex皮肤,外观包括dock背景、文件夹背景、图标标签的颜色等等。你也可以根据需要更换图标标签的字体或者提供一系列的壁纸。每个主题可能包含一个或者多个组件。
这里有两个主题示例来帮助你开始创建自己的主题。如果你只打算创建一个图标包,请使用图标包示例作为基础,并遵从下面的介绍为主题添加图标。如果你打算设计一个全新的主题,请以另外一个主题示例开始,其包含了所有的组件。
下载Apex 图标包示例
下载Apex 主题示例
不管你选择的是那个示例,第一步都是将示例工程导入到Eclipse中。这里是导入步骤。
- 解压示例文件到硬盘中
- 打开Eclipse,在File菜单中选择"Import..."
- 在Import对话框中,选择General下的"Existing Projects into Workspace",点击Next。然后选择你的示例工程的文件夹并点击Finish
- 更改包名。首先在Project Explorer中展开ApexIconPackSample (或者 ApexThemeSample)工程然后展开src文件夹。然后在"com.yourname.iconpackname" (或者"com.yourname.themename")上右键,选择"Refactor > Rename..."。输入你的包名然后点击OK保存
- 在Eclipse Project Explorer中你的主题工程上右键,然后选择"Android Tools > Rename Application Package"。输入(和上一步中)相同的包名然后点击OK。
- 打开"res/values"文件夹下的"strings.xml",修改主题信息。
- 将drawable文件夹下的icon.png替换为你自己的图标。注意示例工程的设置使得这个图标不会显示在抽屉中。但是这个图标可以在Apex Launcher主题设置中看见。
- 为你的主题提供一个特征图片和最多5个预览图片。这是可选的,如果你打算不提供这些图片,你只用删除"strings.xml"中的入口和对应的图片文件就可以了。
现在开始讲述不同的组件。再次强调,在你自己的主题中,可以只包含如下组件中的任意组合。
图标包
首先,请确认"strings.xml"中的config_iconpack已经设置为true
<bool name="config_iconpack">true</bool>
这可以让Apex的主题引擎知道你的主题包含了一个图标包的组件。
接着,打开res/xml目录下的appfilter.xml文件。(注意 这个文件曾经位于assets目录,但是JellyBean新的应用加密特征使主题引擎不能访问付费主题的assets。)你需要为每一个你提供图标的activity添加一个入口,格式如下
<item component="ComponentInfo{com.package.name/com.package.name.ActivityName}" drawable="icon_name"/>
作为例子,这里是我们在示例工程中如何为浏览器应用提供图标的
<item component="ComponentInfo{com.android.browser/com.android.browser.BrowserActivity}" drawable="com_android_browser_browseractivity" /> <item component="ComponentInfo{com.google.android.browser/com.android.browser.BrowserActivity}" drawable="com_android_browser_browseractivity" />
一些应用(浏览器,相机等)可能有不同的包名,但是他们有着相同的activity名。因此同时指定包名和应用名可以消除在向这种应用提供图标时出现的任何歧义。请注意对于drawable 属性的值,我们并不包含文件后缀(.png)
在提供图标时,请确保其基于屏幕密度的尺寸是正确的。一般的,Android支持如下密度:ldpi, mdpi, hdpi, xhdpi,和 xxhdpi。请记住xxhdpi是从JellyBean开始支持的,因此运行ICS的设备可能不会使用之。屏幕密度和图标大小的关系如下:
Density Screen Icon (px) ldpi ~120dpi 36x36 mdpi ~160dpi 48x48 hdpi ~240dpi 72x72 xhdpi ~320dpi 96x96 xxhdpi ~480dpi 144x144
支持如上列表中的每一个密度是不必要的,通常图标会自动的缩放到正确的大小。如果你打算适配一款高端机型,我们建议你使用xhdpi (96x96)作为开始,其应该在高分辨率的屏幕上提供足够的信息。当你决定所支持的密度之后,将图标导出为透明的PNG文件并放在正确的文件夹下(例如drawable-hdpi, drawable-xhdpi)。(实际上是这样,为了减小主题包的体积,只用包含最高DPI的图片即可。譬如你想支持xhdpi,就只在drawable-xhdpi中放这些图标,其他文件夹不用放。但是要注意xxhdpi和Android版本之间的关系。——译者注)
因为不可能为每一个应用都提供图标,你可以提供一个默认的图标背景图片使得所有的图标都有一个统一的观感。如果你提供了,这些背景图片会显示在每一个没有指定主题图标的应用图标之下。如果你打算使用这个功能的优势,请在appfilter.xml文件中声明你的背景图片,格式如下:
<iconback img1="iconback" /> <iconmask img1="iconmask" /> <iconupon img1="iconupon" /> <scale factor="0.75" />
iconback的对应图片(iconback.png)放在适当的drawable目录下。示例图标包项目只提供了一个iconback图片,但是你同样可以有多个iconback图片,主题引擎会为图标随机的选择一个图片。
<iconback img1="iconback1" img2="iconback2" img3="iconback3" img4="iconback4" img5="iconback5" />
所有未主题化的图标都会缩放以适合iconback。缩放因子同样在appfilter.xml声明,1.0 是原始大小,不缩放。
Apex主题引擎同样允许你使用透明图片来遮盖图标(iconmask)或者放置在图标之上(iconmask)。你可以使用透明的iconupon图片来装饰图标(例如达到光泽效果)。(iconmask相当于PS中的蒙版,他会不显示黑色的部分;iconupon放在图标之上,相当于一个在原图标之上的图层——译者注)
上述描述的iconback, iconmask, iconupon和scale标签都是可选的,因此如果你不打算使用这些功能,只需要删除appfilter.xml中的标签和实例工程中对应的图片文件即可。作为附加,主题引擎支持对图标的颜色进行渲染。
因为兼容性的原因,Apex同样支持不使用appfilter的图标包。在这种情况下,为了让Apex Launcher可以检测到并使用他们,你必须将图标文件命名正确。如下是命名规则:
- 图标文件必须基于全activity名
- 文件名全部使用小写字母
- 用下划线替换点
例如,为了在你的图标包中给Android浏览器(com.android.browser.BrowserActivity) 添加一个图标,你需要在正确的drawable文件夹下添加一个命名为"com_android_browser_browseractivity.png"的图标文件。如果有冲突,appfilter具有更高的优先级,将使用其指定的图标文件。
找到正确的组件/Activity名
如果你不知道activity的名字,"Activities"快捷方式列表可以帮你。在你的主屏幕长按,并选择Shortcuts > Activities。当你展开你关心的应用后,每个activity的名字将会显示在其标签下。
自Apex Launcher 2.0开始,activity选择器改进了,可以帮你快速找到你想主题化的应用的正确组件名。每个应用的包名会在应用名下列出,而每个公共activity的名字会在其activity标签下列出。当包名符合activity名的前缀时,activity名会以一个点(.)开始,而前缀会被省略。否则,将提供activity name的完整名。注意每个应用的主activity被标记为蓝色,并且会在应用抽屉中显示。这里有两个实例。
com.android.mms
>> Messaging
.ui.ConversationList
activity名以一个点开始,这意味着你需要用包名连接起来。Messaging应用的完整组件名应该是
ComponentInfo{com.android.mms/com.android.mms.ui.ConversationList}
com.android.chrome
>> Chrome
com.google.android.apps.chrome.Main
在此例中,activity名并不以一个点开始,并且这已经是全名了。Chrome应用的全名应该为:
ComponentInfo{com.android.chrome/com.google.android.apps.chrome.Main}
activity picker之外,下面这个网站可能是有用的。
http://activities.droidicon.com/下一步是声明包含在你的图标包中的图标。这可以通过向"res/values/iconpack.xml"中icon_pack数组里为每个图标添加入口来实现
。这里是一个一个例子:
<string-array name="icon_pack" translatable="false"> <item>com_android_browser_browseractivity</item> </string-array>
再次强调,请不要在此数组中包含文件名后缀。
这些声明对于图标选择器来说是很重要的。图标选择器允许用户更换主屏幕上应用和文件夹的图标。当用户选择您的主题时,只有声明过的图标会在图标选择器中出现。
皮肤
Apex Launcher的主题引擎允许你通过在你的主题中提供某些图片和颜色值,来自定义桌面、Dock和抽屉的外观。ApexThemeSample工程包含了所有你可以更改的东西,并且它提供了默认图片和颜色值,你可以对其进行修改。
如果你在主题包中包含了一个皮肤,请确认"strings.xml"中的config_apexskin设置为true。
<bool name="config_apexskin">true</bool>
请随意使用示例主题作为起始,你可以随意替换drawable-xhdpi目录下的任何图片。
你或许注意到有些图片是9-patch drawables(以.9.png结尾的那些)。9-patch图像是可伸展的,Android可以自动调整他们的大小以适应内容。你可以定义Android缩放时可伸展的区域。绘制9-patch的工具在Android SDK中,它可以允许你使用WYSIWYG编辑器很容易的创建一个9-patch图像。了解更多关于9-patch图像和9-patch绘制工具的信息,请阅读Android开发者站点上的如下部分
http://developer.android.com/guide/d...raw9patch.html
http://developer.android.com/guide/t...tml#nine-patch
如果你不打算改变默认主题的这些图片,请将它们从你的主题包中删除。例如,如果你不想主题化Apex动作图标,你只用删除drawable文件夹中中所有的"ic_*.png" 文件,Apex仍会使用默认图片。这样做可以通过排除不必要的文件减小你主题包的体积,并提高Launcher的性能。
你或许也注意到了drawable目录下有少量的xml文件。这些xml文件是state list drawables,可以基于不同的状态选择不同的图像。如果你不打算主题化抽屉按钮,你需要在移除所有的"ic_allapps.png" 和 "ic_allapps_pressed.png" 后删除"all_apps_button_icon.xml"文件。类似的,如果你不打算主题化抽屉标签,你统统需要在移除"tab_*.png"文件后删除"tab_*.xml"文件。否则这个工程不会编译,因为这些xml文件中依赖于这些被删除的图片。了解更多关于state list drawables的信息,请参考如下链接。
如果要自定义UI元素的颜色值,请编辑"colors.xml"并随意更改color值。
字体//Font
将你的自定义字体放在assets文件夹下,并命名为themefont.ttf。如果这个文件在你的主题中出现,Apex Launcher会自动识别它。请通过在你的设备上测试来确认这个字体能正常使用。
壁纸//Wallpapers
你可以通过将图片放在恰当的drawable目录中来提供壁纸。你同样需要相应的更新"res/values/wallpapers.xml",使Apex能够识别这些壁纸,这里是示例主题中的例子。
<string-array name="wallpapers" translatable="false"> <item>wallpaper_escape</item> <item>wallpaper_outofthebox</item> </string-array> <string name="default_wallpaper">wallpaper_outofthebox</string>
wallpapers 数组中定义的所有壁纸都会在Apex Launcher壁纸选择器中出现。而default_wallpaper会(在用户选择你的主题时)与你的主题一起应用。
链接到Apex主题设置//Linking to Apex Theme Settings
如果你愿意的话,这里有一个特殊的 Intent可以让你用来引导用户到Apex主题设置中你的主题详情页面,在这里,用户可以使用你的主题。方法如下
final String ACTION_SET_THEME = "com.anddoes.launcher.SET_THEME"; final String EXTRA_PACKAGE_NAME = "com.anddoes.launcher.THEME_PACKAGE_NAME"; Intent intent = new Intent(ACTION_SET_THEME); intent.putExtra(EXTRA_PACKAGE_NAME, getPackageName()); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); try { startActivity(intent); } catch (ActivityNotFoundException e) { Toast.makeText(this, "Apex Launcher is not installed!", Toast.LENGTH_SHORT).show(); } finish();
你可以在你的应用中包含这段代码(例如在 onCreate 方法中)来打开Apex的主题设置。请注意示例工程通过设置使其不会在抽屉中显示。如果你需要为你的activity显示一个图标,请在manifest文件中,将值为android.intent.category.LAUNCHER 的category添加到 你activity下的<intent-filter>部分之中。
<intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> <category android:name="com.anddoes.launcher.THEME" /> </intent-filter>
很重要的是,你必须包含值为com.anddoes.launcher.THEME的category,使得 Apex 可以分辨出你的主题。
主题测试
在设备上测试你的主题,并确认其看上去和你期望的一样是十分重要的。你可以遵从如下步骤来测试的你主题。
- 将你的设备(手机/平板)通过USB连接到电脑上
- 在系统设置>开发者设置>USB调试 中打开.USB调试
- 在Eclipse中右击你的项目,选择 "Run As > Android Application"
- 在设备上运行Apex主题设置并选中你的新主题。
- 应用主题并重启Launcher
- 看看所有的东西是不是你所希望的那样
在你完全测试过你的主题后,你已经准备好将其发布给你的用户了。
签名并发布你的主题//Signing and Releasing Your Theme
为了将你的主题发布给其他的Apex Launcher用户,你需要签名、优化、并输出你的APK文件。这些工作可以使用Eclipse 和ADT插件自动无缝地执行。更多细节请参考 Android Developers网站上的publishing 一节
http://developer.android.com/guide/p...p-signing.html
如果你在Google Play Store上发布你的主题,你需要晚点升级?。在此例中,你的主题的版本是十分重要的。你可以在下面这个链接寻求帮助。
就是这样了。我希望这个教程已经包含了足够多的信息可以让你开始制作自己的主题。制作主题愉快!