天天看點

apkplug主題皮膚切換之自定義樣式-05

本文基于apkplug V1.6.9講解

一 何為apkplug自定義樣式切換

    apkplug主題切換包含兩個層次

    1.通用主題,與系統主題相似

    2.自定義控件樣式切換

根據上一篇文章講解我們可以判定通用主題有其局限性,在很多情況下我們需要替換的是與我們應用本事相結合的自定義控件樣式。如QQ聊天挂件

QQ皮膚,QQ聊天泡泡等。針對這種情況我們為apkplug新設計了一套接口,以滿足開發者這方面的需求。

二 自定義控件樣式切換

    自定義控件樣式,顧名思義是我們開發者要求的自定義,因為它與開發的應用本身有關,不同的應用有不同的設計要求和格式。是以不是可提前統一定義的。

三 定義自定義控件樣式替換接口

    根據apkplug的要求,開發者要替換某些自定義控件的樣式就應該提前定義一套替換接口(模闆),主題包可以根據該模闆填充相應的樣式ID傳遞給主應用。不過apkplug并沒有要求模闆的定義格式唯一規定的是該模闆必須是一個java interface 如下:

四 将模闆導出為一個jar包提供給主題包使用

五 主題包填充模闆并傳遞給主應用

    1.主題包外部導入模闆 jar包(類似osgi.jar包)

    2.填充模闆 

    3.将模闆傳遞注冊到apkplug中,以備将來某時被主應用引用

注:此處有一個小點需要注意的是 隻有通用樣式切換設定為該主題包其自定義控件樣式才會生效

4.主應用在繪制界面時判斷是否與可替換的主題樣式 ?

    因為我們不知道何時可能有主題包會提供主題替換的樣式,是以我們就假定在UI建立的時候對模闆進行判斷,如果有就用模闆的樣式ID設定到對應的UI控件上,如果沒有就用預設的。是以主題樣式切換需要重新整理Activity

apkplug v1.6.9提供一個org.apkplug.Bundle.ThemeAgent類,它可以為我們自定監聽模闆變化狀态

自定義UI控件替換樣式代碼示例

5.主應用怎知有主題包提供了一套切換樣式并重繪界面?

     樣式是随時切換的,且可以通過網絡下主題包動态切換.是以我們的主應用需要一套機制來判斷合适切換UI樣式。目前apkplug主題切換樣式需要Activity重新開機來實作,我們提供以下接口來監聽主題切換事件并在适當時機重新開機重新整理Activity