編輯:關於Android編程
該文章是基於apkplug V1.6.8 進行說明的
該 IMThemeDemo 實現了簡單的聊天泡泡切換功能,同時主題包(插件)是托管在apkplug的雲服務器上的。所以要閱讀項目的完整代碼可以先看插件托管服務開發系列文章 <插件托管服務開發指南>
demo運行效果圖:
上一篇文章我們實現了主應用的開發,本篇應用我們開發主題包(插件)。
一,主題包說明
apkplug主題(換膚)解決方案中的主題包本質上是一個完整的apk應用程序或者說是apkplug的插件,但它有以下的不同
1.主題包對外提供主題樣式資源。
2.主題包必須上傳apkplug官網進行編譯,生成的apk才能提供主題切換。否則即為普通apk
二,主題包(插件)搭建
1.按照普通app創建流程創建安卓工程
2.按照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 文件中配置
禁止主題包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提供的接口可以安裝到主應用中
九,IMThemeDemo項目簡單說明
IMThemeDemo插件管理與安裝是使用的apkplug插件托管服務,可查看相關教程了解
什麼是SplashSplash也就是應用程序啟動之前先啟動一個畫面,上面簡單的介紹應用程序的廠商,廠商的LOGO,名稱和版本等信息,多為一張圖片,顯示幾秒鐘後會自動消息,
上一節通訊錄原型的實現(-)中,將到了最基本最簡單的通訊錄的實現,這節就講講類似QQ好友列表的分組名稱懸浮在最頂部的實現。我的基本實現思路如下:1.使用Expandabl
效果預覽源代碼傳送門:https://github.com/yanzhenjie/CircleTextProgressbar實現與原理這個文字圓形的進度條我們在很多APP
黑白棋介紹黑白棋,又叫蘋果棋,最早流行於西方國家。游戲通過相互翻轉對方的棋子,最後以棋盤上誰的棋子多來判斷勝負。黑白棋非常易於上手,但精通則需要考慮許多因素,比如角邊這樣