教程: Android應用如何?換膚功能

來源:互聯網
上載者:User

標籤:android   http   ar   使用   java   檔案   資料   on   問題   

  本節課程的目的:學會換膚的方案及實現,掌握不同換膚方案的優缺點及適用場合。

  希望各位同學做到:學習某一個技巧就掌握透徹,多練習。最好舉一反三、觸類旁通,掌握分析問題解決問題的思路和方法。

  我講解的是原理以及實現的關鍵技術點,細節、最佳化及與課程主題不相關的或初級的內容可能不會講解。這是免費培訓,精力有限,暫時只能做到讓普通的變優秀,讓優秀的變卓越。你要是已經卓越了來教教我吧。暫時不做入門培訓。

  國內有很多的軟體都支援皮膚定製,這也是與國外軟體重大不同之一,國外使用者注重社交、郵件等功能,國內使用者則重視音樂、小說、皮膚等功能,本節課程就來講解Android應用程式如何?換膚功能。

  http://dict.baidu.com/s?wd=%E3%80%90%E5%88%98%E5%BF%83%E8%AF%ADQQ%3A2911834916+100%25%E4%B8%B0%E8%83%B8%E6%88%90%E5%8A%9F+%E6%B8%85%E6%9C%9D%E5%AE%AB%E5%BB%B7%E4%B8%B0%E8%83%B8%E8%8C%B6%E3%80%91%E4%B8%80%E4%B8%AA%E6%9C%88%E5%A2%9E%E5%8A%A0%E4%B8%80%E4%B8%AA%E7%BD%A9%E6%9D%AF

  軟體換膚從功能上可以劃分三種:

  1) 軟體內建多個皮膚,不可由使用者增加或修改;

  最低的自由度,軟體實現相對於後兩種最容易。

  2) 官方提供皮膚供下載,使用者可以使用下載的皮膚;

  使用者可選擇下載自己喜歡的皮膚,有些玩家會破解皮膚的定製方法,自己做皮膚使用,或者傳到網上給大家用。

  3) 官方提供皮膚製作工具或方法,使用者可自製皮膚。

  http://dict.baidu.com/s?wd=%E3%80%90%E5%88%98%E5%BF%83%E8%AF%AD%E4%B8%B0%E8%83%B8%E8%8C%B6QQ%3A2911834916+100%25%E4%B8%B0%E8%83%B8%E6%88%90%E5%8A%9F+%E4%B8%80%E4%B8%AA%E6%9C%88%E5%A2%9E%E5%8A%A0%E4%B8%80%E4%B8%AA%E7%BD%A9%E6%9D%AF%E3%80%91

  這種方式使使用者有參與感,自由度較高。使用者可根據自己的喜好定製軟體的皮膚。有些軟體官網提供皮膚定製的工具或者方法,我建議最好有可視化帶嚮導的工具。使用者只要自己找一些圖片、修改文字的字型替代就可以了。使用者可以上傳自製的皮膚,提供其他使用者下載,還可以賺得一些虛擬貨幣或者獎品什麼的。這種一般都是打包為.zip格式的。副檔名可由各公司自訂,有製作工具的話直接匯出來最方便。

  首先我們要弄清楚換膚的定義,軟體皮膚包括表徵圖、字型、布局、互動風格等,換膚就是換掉皮膚包括的部分或所有資源。

  前面提到的三種皮膚,從軟體實現上來看,它們的本質區別是皮膚是否內建到應用程式中。對於內建的實現比較簡單,只要在開發應用的過程中設計幾套皮膚供使用者選擇。這裡用到的知識不超過Android基礎,不詳細講解。

  本節課程重點講解如何?皮膚與應用程式分離。

  皮膚一般含有多個檔案,例片、配置等檔案,分散的檔案不利於傳輸和使用,最好打包。打包的格式一般選擇zip格式。這裡分兩種情況,一種是apk,例如AdwLauncher,它的案頭皮膚格式是一個apk;另一種是自訂副檔名,例如墨跡天氣皮膚副檔名是mja,搜狗IME的皮膚副檔名是sga,它們的檔案格式實際上都是zip。

  下面我們分別講解。

  一.apk格式

  現在的問題變成了一個應用如何讀取另一個apk中的資源。

  在android系統中,apk之間可以相互讀取資料的條件是:有同樣的簽名,並且AndroidManifest.xml檔案中配置的android:sharedUserId屬性值相同,那麼兩個apk運行在同一個進程中,可以互相訪問任意資料。

  方法如下:

  1) 應用程式和皮膚程式的AndroidManifest.xml中配置

  例如: android:sharedUserId="org.yuchen"

  2) 檔案與應用apk中對同一功能的皮膚檔案名稱要一致

  例如:應用程式的背景圖片路徑:/SkinDemo/res/drawable-hdpi/bg.png

  那麼皮膚apk中的背景圖片檔案路徑也應該是:

  CustomSkin/res/drawable-hdpi/bg.png

  3)訪問資源的方法

  [java] view plaincopyprint?

  Context context = createPackageContext("com.yuchen.customskin", Context.CONTEXT_IGNORE_SECURITY);

  擷取到org.yuchen.customskin對應的Context,通過返回的context對象就可以訪問到org.yuchen.customskin中的任何資源。

  例如:應用apk要獲得皮膚apk中的bg.png,

  [java] view plaincopyprint?

  Drawable drawable = context.getResources().getDrawable(R.drawable.bg);

  這樣就得到了圖片的引用,其他xml資源檔的擷取方式也是類似的。

  二.自訂副檔名的zip格式的皮膚

  技術點在於如何去讀取zip檔案中的資源以及皮膚檔案存放策略。

  方案:如果軟體每次啟動都去讀取SD卡上的皮膚檔案,速度會比較慢。較好的做法是提供一個皮膚設定的介面,使用者選擇了哪一個皮膚,就把那個皮膚檔案解壓縮到”/data/data/[package name]/skin”路徑下,這樣不需要跨儲存空間讀取,速度較快,而且不需要每次都去zip壓縮包中讀取,不依賴SD卡中的檔案,即使皮膚壓縮包檔案被刪除了也沒有關係。

  實現方法:

  1. 在軟體的協助或者官網的協助中提示使用者將皮膚檔案拷貝到SD卡指定路徑下。

  2. 在軟體中提供皮膚設定介面。可以在菜單或者在設定中。可參考墨跡、搜狗IME、QQ等支援換膚的軟體。

  3. 載入指定路徑下的皮膚檔案,讀取其中的縮圖,在皮膚設定介面中顯示,將使用者選中的皮膚檔案解壓縮到”/data/data/[package name]/skin”路徑下。

  4. 軟體中優先讀取”/data/data/[package name]/skin/”路徑下的資源。如果沒有則使用apk中的資源。

教程: Android應用如何?換膚功能

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.