1. 程式人生 > >安卓8.0桌面圖示適配

安卓8.0桌面圖示適配

一、現狀及問題 

        在安卓8.0之前的版本中,原生安裝系統 在應用安裝到手機後,顯示在桌面上的圖示只有一種方式來決定, 即在manifest.xml的Application節點中設定 icon標籤的屬性,這個任何安卓開發者都應該清楚。   
        上面我們說是在原生安卓系統中的表現,那麼在國內就不一定是這樣。 拿小米手機來舉例,MiUI 8.2 對應 Android 6.0.1 版本,我們給app設定一個 沒有背景色的icon後,安裝到小米手機上看看效果。   
          下圖 左側是 程式碼設定,及預覽圖示; 右側是 安裝後顯示的效果。
 

        我們發現,MiUI 在圖示的背景下 預設加了 純色的圓角矩形背景。 Android 原生系統在設計之初就是選擇自由與開放,桌面圖示也不例外, 但MiUI 在桌面圖示上 完全拋棄 android 的理念,選擇效仿 iOS 系統。    這兩種理念都有自己的優點,並沒有誰高人一等。 
       但是要知道國內並非只有 MiUI  一家系統,別人家的系統可能沒加這層純色圓角矩形的背景,APP開發都可能也不希望加這層純色背景,這就導致某些沒有背景色的icon  設計出來時挺好看,但到小米手機上看起來就有點怪,比如下圖:

       再比如某些app的圖示在設計之初就已經加了圓角背景, 但是圓角的弧度卻與MiUI不一致。導至出現四個角有小部分白色弧線,如下圖

       google當然不希望自家的系統  給了使用者這樣不好的體驗。所在 android 8.0 對桌面圖示 設計了全新的規則。

二、8.0的桌面圖示規則

      從Android 8.0系統開始,
1、應用程式的圖示被分為了兩層:前景層和背景層
      也就是說,我們在設計應用圖示的時候,需要將前景和背景部分分離,前景用來展示應用圖示的Logo,背景用來襯托應用圖示的Logo。需要注意的是,背景層在設計的時候只允許定義顏色和紋理,但是不能定義形狀。
2、形狀只能由廠商定製化Android rom時 來 提供一個 定義形狀的 mask,這個mask可以是圓角矩形、圓形或者是方形等等,視具體手機廠商而定,就可以瞬間讓手機上的所有應用圖示都變成相同的規範。

例子:如下圖所示, 其中 安卓機器圖示 與 背景十字網格  都 由 app開發者提供, 最上面的圓形蒙層由廠商提供。

三、可以不適配嗎?

        如果專案進度緊,開發者還想在8.0系統上繼續使用原來 只提供一個icon的方式,這時可以將 targetSdkVersion 設定為低於 26(8.0的api等級)的值 , 這樣 系統仍會以舊版本的方式 來顯示桌面圖示。   類似 6.0許可權適配、7.0 外部儲存檔案跨程序訪問許可權 。

        如果我不適配,但又將 targetSdkVersion 設定為了 26 會發生什麼呢? 答案是 系統最終會 新增預設的背景層 及 廠商預設的mask形狀。 如下圖, 白色為預設背景層,圓形為此係統預設形狀, 這看起來就非常醜了。


 

四、如何適配? 

  1、targetSdkVersion 設定 26或(高於26,畢竟9.0已經發布了)。
  2、在 res 目錄下建立資料夾 mipmap-anydpi-v26 ,再在 mipmap-anydpi-v26目錄 建立 ic_launcher.xml, 注意是xml,內容如下:

<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
    <background android:drawable="@drawable/ic_launcher_background" />
    <foreground android:drawable="@drawable/ic_launcher_foreground" />
</adaptive-icon>

這是一個8.0系統應用圖示適配的標準寫法,在<adaptive-icon>標籤中定義一個<background>標籤用於指定圖示的背景層,定義一個<foreground>標籤用於指定圖示的前景層。 

這是一個使用SVG格式繪製出來的帶紋理的底圖。當然如果你看不懂這裡面的程式碼也沒有關係,因為我也看不懂。SVG格式的圖片都是使用AI、PS等影象編輯軟體製作之後匯出的,基本沒有人可以手工編寫SVG圖片。

當然,背景層和前景層 並不是一定要用SVG格式的圖片,你也可以使用普通的PNG、JPG等格式的圖片,甚至是直接指定一個背景色都可以。 

五、製作適配的素材

在工程res目錄 上右鍵,選擇  “NEW”->"Image Asset" 可以開啟 Android Studio 自帶的  Asset Studio編輯器,如下圖

按數字標的位置 介紹一下這個 編輯器
1、生成的icon的型別, 預設生成  適配8.0 及 相容8.0以前版本的 png圖示
2、生成的各版本的 icon 檔案 名稱
3、這一行裡有三個tab,分別是 編輯 前景、背景、舊版本(即8.0以前的版本)
4、生成的前景層檔案的名稱
5、前景層 資源的型別,三個型別分別是:自己設計 的 png圖片、 系統預設的 藝術圖示、普通文字
6、根據 選擇的前景資源的型別,這裡分別設定 png路徑、藝術圖示種類和顏色、文字字型和顏色
7、縮放前景層資源

需要注意的是 在 適配舊版本的tab中的幾個選項, Legacy Icon  很好理解,api<=25 即為 8.0之前的版本的 圖示的 形狀。 但下面還有個 Round Icon api=25(即7.0), 這是怎麼回事呢?  這是一個只適用在Android 7.1系統上的過渡版本,很快就被8.0系統的應用圖示適配所替代了,我們不用去管它。

按上述操作後, 最終生成 各版本的 桌面圖示, 在mipmap-anydpi-v26目錄生成 適配8.0的 圖示.xml檔案, 在其它 mipmap 目錄下 會生成 適配 低於 8.0 版本的 icon.png檔案,及適配7.1的 icon_round.png檔案。
安裝效果如下圖 :