Android Q適配(1)-------圖示篇
-
Android Q適配(1)-------圖示篇: https://www.jianshu.com/p/77f319ea53aa
-
Android Q適配(2)-------定位篇: https://www.jianshu.com/p/dab9c3179d99
-
Android Q適配(3)-------唯一識別符號篇: https://www.jianshu.com/p/6edf386ba626
前言:
Android Q在2019年的3月份釋出了beta1版本,這算是近幾年Android版本改動中變化最大的一個版本,本文將分章節一一講解Android Q我們程式設計師應該做的適配工作,本文章將分系列,本著作者對應新特性進行儘量全面的理解後,將經驗和成果與大家分享。那麼開始吧!
正文:
本文如題,圖示篇,可能有的同學認為這沒啥好講的,感覺沒有意義,這裡作者通過工作中的開發,表示圖示還是需要一些適配工作的。尤其是從Android 8.0引入了向量圖示後,如今正式在Android Q強制使用了,所以如果大家不對圖示進行適配的話,在Android Q上會出現顯示問題。
當我們新建一個8.0以上的專案的時候,AndroidStudio會自動給我們多建立2個資料夾mipmap-anydpi-v26和drawable-v24,還有drawable下的ic_launcher_background.xml如圖

image
當我們點選進去會發現,裡面全部都是關於verctor的向量圖示,這時候如果小夥伴們不想做適配工作,直接簡單粗暴的刪除掉這些檔案,app在啟動時就會轉向去讀取png的圖示檔案,看似一切問題得到了解決。
但是細心的小夥伴肯定留意到了,從Android8.1開始,引入了圖示的視差和脈動,支援圖示動態調整,只有當你適配了向量圖示後才會啟動如圖

image
這個特性在Android Q上被強制啟動了,也就是說Android Q不會去對你的png圖示進行適應顯示,而是會嘗試把你的png圖示按照新特性來顯示,這時候你的app圖示在Android Q上將會顯示小一圈,無法跟其他App的圖示保持一致了,如圖

image
左邊的刪除了向量圖app在Android Q上顯示的比其他所有圖示都小一圈,並且不支援動態特效,如果你認為這確實是個適配問題,那麼請接著往下看吧,第一篇文章不想寫的太複雜,所以圖示篇並不是簡簡單單的給程式設計師們看的,其實也是UI小姐姐看的,畢竟做圖的是她們,他們不提供素材,一切都是白扯。
下面我會對谷歌官方推薦使用的向量圖作圖辦法進行講解和翻譯,部分文字,圖片是擷取自Google官方文件,方便大家閱讀。
自適應啟動器圖示,它可以在不同裝置型號上顯示為不同的形狀。
您可以通過定義 2 個圖層(由一個背景圖層和一個前景圖層組成)來控制自適應啟動器圖示的外觀。您必須提供圖示圖層作為可繪製資源,而不使用圖示輪廓周圍的蒙版或背景陰影。
圖示的設計要求
- 兩個圖層的尺寸都必須調整為 108 x 108 dp。
- 已遮蔽的視口中顯示的圖示的內層為 72 x 72 dp。
- 系統為 4 個面中每一面的外層保留 18 dp,以建立有趣的視覺效果(例如視差或脈動)。
注意:裝置的原始裝置製造商 (OEM) 可以指定一個蒙版,該蒙版可能包含沿形狀特定點的半徑(最短為 33 dp)。
以上是我擷取的翻譯,這裡給大家詳細解釋一下,並且結合我的經驗給大家說注意事項。
1,UI小姐姐一定要使用AI給大家做svg圖示,千萬別用PS,PS出的svg不能被轉換為vector。
2,就是UI出圖需要給你一個背景SVG和一個標誌SVG,由於是向量圖,所以下面為了讓UI們能理解,全部按照1倍圖說,也就是1dp == 1px。
svg的邊框大小必須為108px,而圖示的實際顯示區域為72px,也就是說自適應圖示周圍要預留33px的空間用來相容Android系統動效
具體示意如圖

image
image.gif
- 圖中灰色部分為預留空間。
- 深粉色範圍為圖示實際顯示範圍,並不是背景範圍,背景範圍需要延伸到108px。
- 淺粉色範圍為標誌SVG中圖示的安全範圍,防止被系統裁切
簡單來說就是UI小姐姐需要提供2個大小為108px的svg檔案,並且按照上圖的要求製作對應的圖層
★注意,UI小姐姐製作圖示,一定不要使用蒙版,因為vector不支援svg的蒙版,vector只支援最基礎的路徑

image
實際效果就是UI小姐姐提供最左邊那種樣式的圖示,我們寫進專案以後,通過不同的系統的不同的蒙版,最終切出我們要的圖示。
如果我是個人開發者怎麼辦?
上文說的是一個正常公司,有UI工程師與你配合才能完成Android Q適配,但是實際上,你可能只是個人開發者,並不會UI的製作,不可能自己製作向量圖示。更甚者,你們公司的UI工程師可能知識不足,AI的使用不熟練,造成無法與你配合。這就比較無解了,只能給UI小姐姐送一本AI從入門到精通了。
如果發生這種事,真的沒辦法適配Android Q了麼,不,有辦法,Google給我們留了一個備用的PNG適配的方法。我們馬上來提到如何操作。
但是這裡我想夾雜一點我個人的觀點,這個方法在Google官網壓根就沒有被提及,僅僅是AndroidStudio為了開發人員做的一個備用方案,為了相容Android各種尺寸解析度的螢幕,Google從Android 5.0開始引入vector向量圖,這已經過去5年了,Google是肯定不推薦你是用PNG這種方式來相容Android Q,所以根本就不會在官網提及如何操作。所以如果作為程式設計師你有條件進行自適應向量圖示適配,請一定要堅持用向量圖示,大家一起推動國內乃至世界的開發標準發展。國內太多人不按Google的要求寫程式了,這回Android Q一定有他們受的!
那麼開始,目前我們做適配一般就做到xxxhdpi,也就是2k的螢幕,所以我們需要準備上文提到的向量圖示的一個至少432px的PNG圖片,因為432px就是2k螢幕要用到的圖示大小,如果使用的圖片小於432px會造成高解析度裝置圖示變虛。

image
在任意圖示資料夾右鍵,按照圖中路徑,點選Image Asset

image
你會看到預設就是Launcher Icons(Adaptive and legacy)
這個就是匯入PNG檔案來適配的,這裡分
Foreground Layer:標誌層
Background Layer:背景層
Legacy:舊版圖示
將準備好的432px的標誌層,跟背景層選到對應的層中,legacy會自定給你生成老版本各解析度需要的圖片大小

image
☆注意:Legacy Icon 的Shape請務必選擇None,否則在大量的老版本甚至新版國產UI(比如弱雞Flyme)上方形圖示無法顯示正確

image
這樣就生成了一大堆png檔案,這樣PNG來適配Android Q就完成了。
你的圖示也可以動起來了
已知問題:無論你使用向量圖示,還是PNG圖示適配,在Flyme7上均無法正確顯示,這是Flyme自己的問題,這個系統不遵照Google在Android 8.0釋出的圖示開發規範,除非他們自己改正,否則無解

image
後記
其實最開始是不準備寫第二種PNG適配的方法的,因為感覺肯定有很多人為了湊合而使用第二種方法,不過作為程式設計師,你把一個5kb的vector就解決的適配,變成了每個解析度資料夾裡都有一個png檔案,這至少是vector的5倍大。所以我們最好還是採取第一種向量圖示的方式來適配,這樣才是正路,也避免以後裝置引數的改變造成不必要的影響。
本文寫到這裡也就結束了,隨後我會更新更多關於Android Q的新特性和適配方法,敬請期待!!!
- Github: https://github.com/liyuhaolol
- 部落格: http://blog.csdn.net/ccffvii
- 簡書: https://www.jianshu.com/u/a305fae6394f
- 郵箱:[email protected]
如果看不懂或者我寫的有問題的地方,歡迎在評論中指出,大家一切探究討論!