天天看點

Android無縫切換主題,動态換膚

說起Android的動态換膚方案,可謂是人雲亦雲,各有各的方法,魚龍混雜,我實在是參考不來一個好的換膚方案。

于是準備自己搞一個。

在這裡我是拒絕寫多個style實作換膚的

Android無縫切換主題,動态換膚

那麼隻能用Java代碼來實作(話說這樣是不是有點難度啊,答案是否定的,難倒是不難,就是稍微麻煩點)

首先簡述一下整體的思路:

Android無縫切換主題,動态換膚

1.在Activity中的onCreate中,檢查目前設定的theme樣式(随意用什麼方式實作存儲,主要是拿到目前設定的樣式)

2.開始setContentView,這裡就要進行判斷和語句分支了:if(mode1){...}else if(mode2){...},開始使用代碼的方式為布局設定顔色等

3.新增 reloadView 接口,這樣做的目的是在使用者切換主題後重新設定布局顔色等,實作動态切換主題。

這樣做的确是個不錯的方法(個人感覺

Android無縫切換主題,動态換膚

),但是如果Activity中有一個listView,也可能有很多層嵌套的chilView,這樣的話就有一些麻煩,每一個view都需要準備兩種主題。。。。反正就是這樣,動态換膚本來就是這麼繁瑣

Activity的問題解決了,可是Activity裡還嵌套了Fragment怎麼破?

别急,先看思路:

Android無縫切換主題,動态換膚

還是一樣的套路,Fragment中新增ReloadView方法,目的也是起到一個重新整理的作用,當宿主Activity被執行ReloadView方法時,也應當通知目前活動在Fragment棧中的對象,并調用Fragment中的ReloadView方法,執行動态換膚。。。

Android無縫切換主題,動态換膚

以上思路可以快速解決動态換膚,謝謝觀看~