我們請來了人氣跨平臺記賬應用《錢跡》的開發者,為大家解讀原生和定制 Android 系統小組件的功過得失。
在今年的 WWDC 中,Apple 終于「舍得」為 iOS 的桌面小組件補上一項重要功能:可交互性。從 iOS 17 開始,無論是在鎖屏、主屏還是這次剛上線的「待機」頁面,我們都可以通過小組件上的交互按鈕完成一些簡單的任務。
關聯閱讀:
(資料圖片僅供參考)
但對于 Android 用戶來說,小組件支持交互似乎應該是一件「天經地義」的事情。早在 2008 年 10 月發布的首個版本中,Android 就支持小組件;2021 年發布 Android 12 時,Google 還進一步強化了小組件方方面面的功能,包括圓角、主題、自定義、功能、自適應布局、動畫效果等,為小組件在平板、折疊屏等大屏設備中的表現力提供了更好的基礎。
Android 4.2 的鎖屏小組件,圖自 Trendblog
不過,這種先發優勢并不意味著 Android 小組件就能睥睨 iOS。相反,正如 Android 平臺的常見劇本《起個大早趕個晚集》那樣,它的小組件也是功能有余、細節不足。今天,如果你在 Google Pixel 的啟動器上添加幾個來自不同 app 的同尺寸小組件,大概率也就能看到幾種各不相同的實際尺寸和圓角半徑。
或許正是出于對原生 Android 這種粗糙效果的不滿意,我們看到 MIUI 等定制系統紛紛選擇另起爐灶,重新制定一套小組件的開發方案和設計規范。
那么,Google 的小組件方案到底有什么問題導致了這種現狀,第三方系統又是怎么試圖解決的?
專業的問題還是要專業的人來解答。為此,我們請到了人氣記賬 app《錢跡》的開發者李唐。作為一款跨平臺 app 的開發者,李唐對 iOS 和 Android 的小組件適配有著第一手的經驗,也親身體會過個中不為用戶所知的種種「坑」。
下面,我們就把麥克風交給李唐,由他來為大家分析原生和定制 Android 系統小組件的功過得失。
找準「定位」,是小組件的首要問題
和型號總是已知、分辨率數值明確的 iPhone 不同,Android 設備的分辨率可謂千奇百怪,這種屏幕參數的碎片化,直接導致小組件無法按照開發者設想的形狀進行呈現。
以下圖為例,物理尺寸觀感基本相同的字母 a,在左側的低分辨率設備上顯示時所使用的實際物理像素數量更少;所以反過來說,一個長寬均為 100 物理像素的正方形,在同尺寸低分辨率設備上的顯示效果往往會更大。
尺寸相同的兩個屏幕可能具有不同數量的像素 | 圖:Google
為了保證不同屏幕上的尺寸和觀感一致性,Android 平臺引入了密度無關像素(dp)這個度量單位來進行輔助;桌面小組件也不例外。在 Android 12 之前,Google 允許開發借助單位為 dp 的 minHeight 和 minWidth 兩項參數來設定小組件在主屏上的最小長寬,希望通過這種方式來保證同一小組件在不同設備上的尺寸基本一致。
但密度問題可以「無關」,精度問題又會出來搗亂。密度無關像素的計算過程涉及根據特定公式進行計算轉換,由于轉換后的數值可能不是一個整數值,結果需要四舍五入,然后將結果歸入最為接近的整數坐標網格內。另外,因為轉換公式中屏幕密度與物理像素的正相關關系,分辨率越高的設備,在遇到類似情況時四舍五入的結果差異也就越大。
換言之,以 dp 作為小組件尺寸參考的做法只能保證小組件在視覺觀感上的大致相近,并且這種觀感差異會極大程度上收到高分辨率、高像素密度等因素影響。
開發者為了避免小組件內容顯示出現錯位、異常,就不得不通過一些特定的布局手段來對小組件邊界進行額外調整,比如邊距、比例、對齊規則等……這些額外的調整標準各不相同,最終小組件呈現出來的實際效果自然千差萬別。
以下圖中的 Glance Weather 與 Apple Music 的小組件為例。盡管兩者名義上都是 4 × 1 尺寸,但前者追求將小組件鋪滿所在的網格區域,后者則以內容為中心,將小組件做得盡可能緊湊;放在一起,就會出現這種「逼死強迫癥」的景觀。
因此,李唐認為直到 Android 12 之前,Android 的小組件都可以說是「半成品」。從開發者的角度觸發,他的記賬應用錢跡最初進行小組件開發時就遇到過非常多的痛點,加上 Android 本身比較割裂的生態,Google 以往所提供的方法或者屬性在實際應用中可以說是沒什么效果的:
早前如果我們按照 Google 的官方文檔開發小組件,這個小組件在不同廠商的手機上所呈現出來的尺寸大概率各不相同,同一個小組件在 4x5 和 5x6 的桌面中寬高比也完全不一樣……在經歷了多輪嘗試后,我們最終放棄了對尺寸統一的奢望,以 MATCH_PARENT 這種方式將小組件尺寸渲染完全交給手機去自行處理——盡管它在某些機型又會帶來其他問題。
那么,對小組件做出重大更新的 Android 12 是否解決了這個問題呢?答案并不十分樂觀。
首先回顧一下 Android 12 對小組件的一個主要改進和切入點:桌面網格(grid cells)。從這代系統開始,小組件可以預設自己的目標網格寬度和高度(通過 targetCellWidth 和 targetCellHeight 兩項屬性)了。換句話說,開發者可以向桌面聲明其小組件預期呈現的形態,而不是放由系統進行不精確的估算和轉換。這樣,用戶能夠直接感,特殊情況也更易提前考慮,在 Google 看來正是更好的選擇。
應當肯定,這個改進是有效果的。直接將小組件與桌面網格匹配的做法,配合 Android 12 對小組件圓角半徑、響應式布局以及精確式布局等方面的改進,使得借助這些新規范進行開發的小組件在 Android 12 及以上版本系統中,已經能夠呈現視覺效果幾乎一致的小組件尺寸了,比如下圖右側上方的 Google 天氣和 Google 相冊:
iOS 與 Android 的 2 × 2 小組件對比
但這套方案與 iOS 的小組件差距依然存在,因為 Android 12 的新方案并沒有解決所有問題。網格能約束小組件的「外在」,但管不到「內在」。Google 并未像 iOS 那樣為小組件規定更為嚴格的布局屬性,如果在網格內部小組件與網格邊緣的邊距各不相同,依然會導致特定尺寸、尤其是不規則形狀小組件在視覺效果上的「不和諧」。
以下圖的兩個小組件為例,雖然名義上都是 3 × 2 尺寸,但一個內部邊距大、一個內部邊距小,看起來完全不像是一個尺寸的東西:
3 × 2 尺寸的不規則小組件,邊距就千奇百怪了立足小生態摳細節、嚴管理:MIUI 的嘗試
Google 的原生方案不好用,定制系統也就紛紛動起了另起爐灶的心思。特別是 MIUI、OriginOS 等本就或多或少借鑒了 iOS 的國內定制系統,眼看著 iOS 跟進了小組件,繼續「從善如流」地打造一套更接近 Apple 做法的方案,是一個比較自然的選擇。
這方面,最有代表性的就是 MIUI。2021 年 9 月,MIUI「小部件」功能上線開發版,同時上線的還有首批適配了小部件的第三方應用,包括百度、QQ 音樂、高德地圖等。
頭條 23-06-29
頭條 23-06-29
頭條 23-06-29
頭條 23-06-29
頭條 23-06-29
頭條 23-06-29
頭條 23-06-29
頭條 23-06-29
頭條 23-06-29
頭條 23-06-29
頭條 23-06-29
頭條 23-06-28
頭條 23-06-28
頭條 23-06-28
頭條 23-06-28
頭條 23-06-28
頭條 23-06-28
頭條 23-06-28
頭條 23-06-28
頭條 23-06-28
頭條 23-06-28
頭條 23-06-28
頭條 23-06-28
頭條 23-06-28
頭條 23-06-28
頭條 23-06-28
頭條 23-06-28
頭條 23-06-28
頭條 23-06-28
頭條 23-06-28
頭條 23-06-28
頭條 23-06-28
頭條 23-06-28
頭條 23-06-28
頭條 23-06-28
頭條 23-06-28
頭條 23-06-28
頭條 23-06-28
頭條 23-06-28
頭條 23-06-28
頭條 23-06-28
頭條 23-06-28
頭條 23-06-28
頭條 23-06-28
頭條 23-06-28
頭條 23-06-28
頭條 23-06-28
頭條 23-06-28
頭條 23-06-28
頭條 23-06-28
頭條 23-06-28
頭條 23-06-28
頭條 23-06-28
頭條 23-06-28
頭條 23-06-28