android下apkplug通用主题(皮肤)切换解决方案之主题包开发-02

该文章是基于apkplug V1.6.8 进行说明的

我们提供了一个demo做为参考,项目下载地址为:http://git.oschina.net/plug/IMThemeDemo

该 IMThemeDemo 实现了简单的聊天泡泡切换功能,同时主题包(插件)是托管在apkplug的云服务器上的。所以要阅读项目的完整代码可以先看插件托管服务开发系列文章 <插件托管服务开发指南>

demo运行效果图:

上一篇文章我们实现了主应用的开发,本篇应用我们开发主题包(插件)。

一,主题包说明

apkplug主题(换肤)解决方案中的主题包本质上是一个完整的apk应用程序或者说是apkplug的插件,但它有以下的不同

1.主题包对外提供主题样式资源。

2.主题包必须上传apkplug官网进行编译,生成的apk才能提供主题切换。否则即为普通apk

二,主题包(插件)搭建

1.按照普通app创建流程创建安卓工程

2.按照apkplug插件开发流程添加必要文件 <apkplug插件开发>

osgi.jar应使用osgi1.6.8.jar

3.将主应用导出的主题切换接口jar包(IMTheme.jar)导入工程

com.apkplug.imthemedemo.themeinterface.chatstyles

三,创建主题控件样式资源

与普通app开发一样,我们创建一些用于聊天泡泡按钮背景的资源,它们可以是图片或者xml样式,最终都将以R.id的形式传递给主应用进行替换

四,添加主应用约定的chatstyles服务

com.apkplug.imtheme1.SimpleBundle

01 ServiceReference
reference=mcontext.getServiceReference(ThemeControl.
class.getName());
02 if(null!=reference){
03     ThemeControl
service=(ThemeControl) mcontext.getService(reference);
04     if(service!=null){
05         service.addStyles(mcontext,
chatstyles.
class.getName(),
06         new chatstyles(){
07         @Override
08         public int chat_left_msg_background()
{
09             return R.drawable.chat_btn_left;
10         }
11         @Override
12         public int chat_right_msg_background()
{
13             return R.drawable.chat_btn_right;
14         }
15         @Override
16         public int Version()
{
17                 return 0;
18         }
19         @Override
20         public int chatbackground()
{
21                 return R.drawable.menu_background;
22         }
23     });
24    }
25 }
26 mcontext.ungetService(reference);

注意:此时仅是添加并未真正设置为可替换的样式(主应用ThemeChengFactory接口监听不到)。只有当该主题包被设置为主题以后才会真正注册。

五,将主题包设置为apkplug框架当前可用替换主题包

com.apkplug.imtheme1.MainActivity

01 public void setTheme1(int themeid) throws Exception{
02 BundleContext
mcontext=BundleContextFactory.getInstance().getBundleContext();
03 ServiceReference
reference=mcontext.getServiceReference(ThemeControl.
class.getName());
04     if(null!=reference){
05         ThemeControl
service=(ThemeControl) mcontext.getService(reference);
06         if(service!=null){
07             //设置自身为apkplug框架当前可用主题包
08         service.setTheme(mcontext,
mcontext.getBundle(),themeid);
09         }
10     mcontext.ungetService(reference);
11     }
12 }

这一步在界面表现为用户点击以下按钮:

用户点击此按钮以后该主题包被设置为apkplug层主题,且ThemeChengFactory也将监听到该主题包SimpleBundle中所提供的chatstyles接口服务,同时com.apkplug.imthemedemo.activity.MainActivity也将监听到主题切换事件从而重绘界面。

六,注意事项

主题包之间如果资源重用会引起资源冲突,所以我们应当隔离两个主题包之间的资源。通过在主题包

AndroidManifest.xml 文件中配置

<meta-data android:name="apkplug-theme" android:value="Main-Bundle-Hide"></meta-data>

禁止主题包activity使用apkplug层的主题,从而防止资源冲突

1 <activity
2       android:name="com.apkplug.imtheme1.MainActivity"
3       android:label="@string/app_name" >
4       <meta-data android:name="apkplug-theme" android:value="Main-Bundle-Hide"></meta-data>
5       <intent-filter>
6           <action android:name="android.intent.action.MAIN" />
7           <category android:name="android.intent.category.LAUNCHER" />
8       </intent-filter>
9 </activity>

七,打包源码包并上传服务器编译

主题包与普通插件有所不同,不能在本地编译器进行编译,需要将源码包上传服务器进行编译生成apk文件

1.打包源码包

注意:源码包内不能包含中文名称的文件或路径,打包文件zip格式且为根路径

2.上传云服务器编译生成apk主题包

3.编译成功以后下载apk主题包

该主题包是未签名主题包,开发者可用签名工具自行签名,主题包所有的资源与文件版权都归开发者所有

八,将主题包(插件)安装到主应用中

我们得到的主题包apk文件是一个完整的app插件,通过apkplug提供的接口可以安装到主应用中<apkplug插件安装>

九,IMThemeDemo项目简单说明

IMThemeDemo插件管理与安装是使用的apkplug插件托管服务,可查看相关教程了解<apkplug插件托管服务系列教程>

android下apkplug通用主题(皮肤)切换解决方案之主题包开发-02,布布扣,bubuko.com

时间: 2024-10-14 05:31:51

android下apkplug通用主题(皮肤)切换解决方案之主题包开发-02的相关文章

android下apkplug通用主题(皮肤)切换解决方案之主应用-01

该文章是基于apkplug V1.6.8 进行说明的 我们提供了一个demo做为参考,项目下载地址为:http://git.oschina.net/plug/IMThemeDemo 该 IMThemeDemo 实现了简单的聊天泡泡切换功能,同时主题包(插件)是托管在apkplug的云服务器上的.所以要阅读项目的完整代码可以先看插件托管服务开发系列文章 <插件托管服务开发指南> demo运行效果图: 一,apkplug的主题说明 apkplug主题解决方案摒弃了以往以图片替换的形式切换效果的方式

apkplug主题皮肤切换之自定义样式-05

本文基于apkplug V1.6.9讲解 一 何为apkplug自定义样式切换 apkplug主题切换包含两个层次 1.通用主题,与系统主题相似 2.自定义控件样式切换 根据上一篇文章讲解我们可以判定通用主题有其局限性,在很多情况下我们需要替换的是与我们应用本事相结合的自定义控件样式.如QQ聊天挂件 QQ皮肤,QQ聊天泡泡等.针对这种情况我们为apkplug新设计了一套接口,以满足开发者这方面的需求. 二 自定义控件样式切换 自定义控件样式,顾名思义是我们开发者要求的自定义,因为它与开发的应用本

Android 下实现通用自启动守护实现

1.Android 操作系统架构 Android 系统分为四个层,从高到底分别是:应用程序层(Application).应用程序 框架层(Application Framework).系统运行库层(Libraries)和 Linux 内核层(Linux Kernel). Android 操作系统最底层还是 Linux 内核,我们就从 Linux 内核开始着手. 2.Linux 配置自启动原理 Linux 加载后, 将初始化硬件和设备驱动, 然后运行第一个进程 init.init 根据配置文件继续

jQuery实现无刷新切换主题皮肤功能

jQuery实现无刷新切换主题皮肤功能 helloweba.com 作者:月光光 时间:2010-12-13 12:49 主题皮肤切换功能在很多网站和系统中应用,用户可以根据此功能设置自己喜欢的主题颜色风格,增强了用户体验.本文将围绕如何使用jQuery实现点击无刷新切换主题皮肤功能. 查看演示 实现该功能的原理就是通过点击定义的主题样式,改变页面当前引用的主题CSS文件,并且将当前的主题样式写入cookie中或者写入数据库中,以便下次该用户重新访问页面时,调用的就是上次设置好的主题样式. 准备

Android 实现切换主题皮肤功能(类似于众多app中的 夜间模式,主题包等)

首先来个最简单的一键切换主题功能,就做个白天和晚上的主题好了. 先看我们的styles文件: 1 <resources> 2 3 <!-- Base application theme. --> 4 <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 5 <!-- Customize your theme here. --> 6 &l

LNMP下wordpress无法切换主题,只显示当前主题解决方法

最近在lnmp下发现wordpress后台无法切换主题,只能显示当前主题,开始还以为是文件没传完,又重置了一遍,还是一样.百度得知,原来军哥的LNMP安装包默认关闭了scandir函数,为了安全考虑. 找到问题所在很简单,其实军哥在安装包里面已经说明关闭了一些函数,自己研究下哈.用winscp或者flashfxp登陆,找到 /usr/local/php/etc/php.ini 下载下来进行编辑,ctrl+f查找disable_functions,找到我们要使用的scandir函数,删除,然后上传

关于android 使用bitmap的OOM心得和解决方案

android开发,从2010年开始学习到现在的独立完成一个app,这漫长的四年,已经经历了很多次bug的折磨,无数次的加班训练.然而,自以为自己已经比较了解android了,却最近在一个项目上,因为oom而折腾了一个周,回到原地,认识了自己的不足,感觉自己是如此的菜鸟呀. 好了,不废话,大家在使用开发android的时候,很少会注意或者意识到释放内存的重要性,因为大家在使用过程中,涉及的图片资源不多,或者比较稳定,来回切换界面,图片也就那么几张或者使用的都是很小的图片,根本不会感觉到图片占用内

iOS程序框架设计之皮肤切换功能 (白天与夜间效果)

iOS程序框架设计之皮肤切换功能 一.引言 移动应用的开发中,有时我们会需要例如更换皮肤此类的功能,andorid采用xml配置UI的方式,这个问题或许还容易解决些,iOS的主要UI逻辑则是在代码中控制的,如果没有一个强大的框架方案,这个问题将变得非常棘手.网上也有很多诸如此类功能的优秀案例与框架,在这篇博客中,我与大家分享下我的解决方案,其中如果有不恰或者糟糕之处,希望与高人一起交流. 二.设计思路与框架 首先我的设计思路是采用通知的方式,原理可以如下理解为以下几步: 1.在系统的通知中心注册

Android下WiFiDisplay功能探究

1 WiFiDisplay简介 1.1WiFiDisplay概述 WiFiDisplay(WFD)是WiFi联盟在已有技术的基础上,为了加速视/音频的传输分享而提出来的一个新概念.WiFi联盟对此成立了一个认证项目:Miracast-- 用来认证一个设备是否支持WiFiDisplay功能. 下图是WiFiDisplay功能的技术支撑体系,实际上最重要的部分就是WiFi Direct:也就是两个设备无需AP(AccessPoint)的情况下直接相连,这就奠定了两个带WiFi功能的设备能够随时传递高