【移動應用開發(fā)技術】Android APP怎么換膚_第1頁
【移動應用開發(fā)技術】Android APP怎么換膚_第2頁
【移動應用開發(fā)技術】Android APP怎么換膚_第3頁
全文預覽已結束

付費下載

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

【移動應用開發(fā)技術】AndroidAPP怎么換膚

這篇文章主要講解了“AndroidAPP怎么換膚”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著在下的思路慢慢深入,一起來研究和學習“AndroidAPP怎么換膚”吧!背景需求目前AndroidAPP換膚大體可分為兩大類:兩套主題的切換(比如白天/黑夜),使用一個開關按鈕進行切換。多套主題在線下載并更新。第一種的實現基本上使用設置本地Theme來操作,即將所有的資源打包到APP中,并且根據主題進行切換。第二種不可能使用第一種的實現方式,因為將所有資源都打包到APP中缺乏靈活性,不利于活動的更新,并且也會使得apk包的體積變大。所有第二種的實現必須是支持線上下載的。方案選擇配合產品的需求并且能實現換膚的靈動性,我們選擇上述的第二種方案。經過之前的Android和IOS成員小組討論,統(tǒng)一覺得可以采用下載壓縮包,并通過解析壓縮包讀取資源進行替換。壓縮包下載下來后怎么讀取資源?這里有兩種方式:將下載的皮膚包進行解壓縮并且通過文件流的方式讀取里面的圖片資源、文件資源。將下載的皮膚包加載到assetManager管理器中,并通過該管理器新建一個Resource對象,需要換膚的控件通過Resource對象進行讀取資源。第一種方式需要手動開啟文件流,并且不同的文件流有不同的文件流方式,比如圖片、文本文件等,還有不同設備由于分辨率加載的資源是不同的,如何合理地去選擇合適的資源去加載也是一個需要解決的問題。第二種方式需要將皮膚包加載到assetManager管理器,assetManager管理器新生成的Resource對象和我們主工程的Resource對象是相同類的不同對象,可以使用我們熟悉的方式去加載資源(如resource.getColor,resource.getDrawable等)?;谏鲜鰞煞N加載資源的方式,這里選擇第二種方式進行資源的加載與讀取。具體實施1、將所需的皮膚包通過網絡下載到本地,這里的皮膚包是一個apk文件,為了讓apk包足夠小,里面只包含資源文件??赡苡卸鄠€皮膚包,比如theme1.skin,theme2.skin2、通過后臺獲取需要加載的皮膚包的名字,如theme1.skin,通過調用AssetManager對象的addAssetPath方法并生成一個新的Resource對象,如下代碼:

AssetManager

assetManager

=

AssetManager.class.newInstance();

//由于addAssetPath()這個方法被隱藏掉了,所以不能直接使用對象直接訪問,

//這里使用了反射的方式,作用是將該皮膚包加入到asset管理器中

Method

addAssetPath

=

assetManager.getClass().getMethod("addAssetPath"

,

String.class);

addAssetPath.invoke(assetManager,

skinPath);

Resources

skinResource

=

new

Resources(

assetManager,

superRes.getDisplayMetrics(),

superRes.getConfiguration());3、自定義一個InflaterFactory的子類,SkinInflaterFactory,重寫onCreateView(View,String,Context,AttributeSet)方法,對于需要換膚的控件進行屬性的解析與存儲,然后對這些換膚的控件去第二步的Resource對象中加載資源并設置到這些控件中。4、在BaseActivity的onCreate方法新建SkinInflaterFactory對象,并將該SkinInflateFactory對象設置給Activity的LayoutInflater對象,如下代碼:

protected

void

onCreate(@Nullable

Bundle

savedInstanceState)

{

mSkinInflaterFactory

=

new

SkinInflaterFactory();

LayoutInflaterCompat.setFactory(

getLayoutInflater(),

mSkinInflaterFactory);

super.onCreate(savedInstanceState);

}流程圖https://upload-images.jianshu.io/upload_images/3117364-905531a2a491d8ae.png?imageMogr2/auto-orient/strip其他問題1、如何支持控件點擊后觸發(fā)不同的業(yè)務流程?可以通過自定義一個屬性,如skin:click="@string/clickAction",主工程的clickAction="muapp://app/testDefault",皮膚包里的clickAction="muapp://app/testClick",通過目前項目中的路由機制觸發(fā)不同的跳轉動作。比如說上述默認的跳轉是跳轉到主工程(app為module名)的TestDefaultAction(注解actionName="testDefault")類的invoke方法中,而更改后會跳轉到主工程(app為module名)的TestClickAction(注解actionName="testClick")類的invoke方法中。2、如何支持控件的不同行為方式?例如不同的動畫效果等這個問題和第一個問題的處理方式的類似的,同樣可以通過主工程和皮膚包不同的tag(String文案)處理不同的行為方式。3、如

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論