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相关推荐
- vue css变量实现多主题皮肤切换
实现方式 多主题皮肤切换有很多种实现方式,可以用css预处理器实现.可以用js实现,其实最简单的一种方式是用css变量(CSS Variable)来实现 在单页应用中,我们通过设置body的css变量 ...
- iOS App主题皮肤切换功能简介和具体实现详解 附有源码
分享一个朋友的人工智能教程.比较通俗易懂,风趣幽默,感兴趣的朋友可以去看看. 0.换肤的应用场景 一般情况下某些App在节假日(春节.中秋.国庆等)切换主题,显得更适合当下的气氛; 切换白天或夜晚模式 ...
- 微信小程序 主题皮肤切换(switch开关)
示例效果: 功能点分析: 1.点击switch开关,切换主题皮肤(包括标题栏.底部tabBar): 2.把皮肤设置保存到全局变量,在访问其它页面时也能有效果 3.把设置保存到本地,退出应用再进来时,依 ...
- ios 主题切换 思路_iOS主题皮肤切换
如果您的企业已启用企业统一身份认证,请在企业内部系统修改密码. 切换企业 点击消息列表界面的"切换企业/组织",方便快速切换企业/组织."切换企业/组织"及企业 ...
- Android下的配置管理之道之对 OTA 更新包进行签名
对要发布的版本进行签名 Android 操作系统映像在两个地方使用加密签名: 映像中的所有 .apk 文件都必须经过签名.Android 软件包管理器通过下列两种方式使用 .apk 签名: 更换应用时 ...
- jQuery实现无刷新切换主题皮肤功能
主题皮肤切换功能在很多网站和系统中应用,用户可以根据此功能设置自己喜欢的主题颜色风格,增强了用户体验.本文将围绕如何使用jQuery实现点击无刷新切换主题皮肤功能. 实现该功能的原理就是通过点击定义的 ...
- Android下查看共享库依赖项
Android下查看共享库依赖项 [时间:2017-02] [状态:Open] [关键词:android,共享库依赖项,so,ndk,objdump,readelf] 起因 近期在处理Android下 ...
- Jupyter Notebook主题皮肤安装设置
Jupyter Notebook主题皮肤安装设置 主题皮肤库安装 pip install jupyterthemes 主题皮肤库命令 Jupyter Notebook主题皮肤库都是(jt)开头,后面紧 ...
- Android 实现切换主题皮肤功能(类似于众多app中的 夜间模式,主题包等)
首先来个最简单的一键切换主题功能,就做个白天和晚上的主题好了. 先看我们的styles文件: 1 <resources>2 3 <!-- Base application theme ...
最新文章
- Java 8 一行代码解决了空指针问题,太厉害了...
- 71页《乌镇智库:全球人工智能发展报告(2018)》PDF下载
- 成功解决ValueError: Parameter values for parameter (n_estimators) need to be a sequence.
- 【蓝桥杯】基础练习 数列排序
- python实现微信小程序的接口自动化_appium+python自动化56-微信小程序自动化(摩拜为例)...
- 业务中台01:中台解决方案本质在解决什么问题?
- 腐蚀rust电脑分辨率调多少_腐蚀Rust画面怎么设置 _游侠网
- 如果这篇文章说不清epoll的本质,那就过来掐死我吧!
- Unicode编码之显示定向重写
- Excel 批量删除自定义名称
- 储存卡数据怎么恢复?恢复靠它
- Android Wi-Fi 设置wifi Only 11a、b、g、n 扫描(以QCOM为平台)
- Java学习 --- 类与对象
- php怎么让浏览器崩溃,让IE6浏览器崩溃
- Android中3D gallary的实现
- 交换机工作原理/模式
- linux 跑天龙八部游戏脚本,天龙八部脚本免费版2019export
- 3.2 项目(多肉)
- MJ系列之手写代码汇总
- thx是什么意思_THX是什么意思
热门文章
- 一周车市要闻(1月21—27日)
- WPD v1.4.1834 Windows系统隐私优化工具
- 关于windows Server 服务器MD5报错,System.InvalidOperationException: 此实现不是 Windows 平台 FIPS 验证的加密算法的一部分。
- spacy中的pipelines
- 从另外一个角度解释AUC
- 图像转灰度值计算公式原理_图像处理--传统算法
- xp灾难不降临中国不会使用汉澳sinox源于消防救灾式管理
- vue之 render函数 入门篇
- hil测试matlab模型下载,电力电子系统的硬件在环 (HIL) 测试
- java冒险游戏_冒险类的基于文本的冒险游戏