Tuesday, June 26, 2012

Android device 多逹 4000 種, 不同螢幕大少/解像度會否成為開發者的致命傷?



早前有報導指 Android device 多逹 4000 種, 亦因此為開發者帶來不少難度. 其中, 各種不同螢幕大少/解像度會否成為開發者的致命傷?


要設計一個能支援所有 Screen Size 的 UI 主要考慮到三點, 一是螢幕大小 , 二是螢幕密度 , 三是顯示方向.


一, 螢幕大小歸納了四種: small, normal, large, and xlarge. 由 1.6 版本開始, Google 已經向開發者說明 UI 設計應該使用 Density-independent pixel (dp / dip) 作為計算單位. 所以, 首先注意的是每一件元件都要以 dp 來作單位, 而不是 px. 再配合不同 Qualifier 就可以為不同大小的螢幕設定不同的排版 (如: layout-small/, layout-xlarge/). 排版時要善用 weight 及 9.patch 圖片, 這樣系統顯示版面時會自動為不同螢幕大小修正長度,


二, 螢幕密度大概分為 ldpi, mdpi, hdpi, xhdpi 及 tvdpi(Google TV用及新的 Nexus 7), 根據(一)的排版, 就可以製作不同大小的圖像應用到不同密度的螢幕. 圖像大小可以以 mdpi 作為參巧值, 如一個 50x50px 的圖片, 在 hdpi 可以製作成 75x75px. 除質素提高外, 較大的圖像所製作的按鈕在高密度的螢幕會較為好按. 如果用家的設備沒有相應的圖像資源, 系統則會自動縮放現有的資源顯示. 如要偷懶的話, 可以只為 hdpi 製作圖像, 但細小的螢幕可能會出現圖像過大的情況, 而自動縮放亦都會使圖像質素下降.


三, 基本上只要為(一)所排的版面再以不同方向排版一次, 如有需要的話可以配合 Fragment 為不同的方向製作不同版面, 這個有機會再講.


如一切順利的話, 你的應用相信已經可以支援市場上九成九的螢幕了。相信第一次製作全螢幕支援的軟件會感到困擾, 但一掌握了技術的話, 以後只要作幾個重點測試已經足夠了. 況且就算做得不太好, 亦只會"比較難睇", 軟件還是可用的. 相信不會成為開發者的致命傷.

返回 Launcher, 按 Back / Home 鍵究竟有何分別?


Android 的優勢是多工作業, 很多用家會在使用一個軟件的途中返回 Launcher(即主桌面) 看看 Widget 中的資訊或啟動其他軟件, 完成後再返回原來的軟件. 那麼在軟件的主介面中, 按 Back / Home 鍵究竟有何分別呢? 甚麼時候應該按 Back, 又甚麼時候應該按 Home 呢?

其實主要分別在於 Back 鍵是直接關閉當前軟件, 再返回 Launcher(或返回啟動該軟件的軟件). 而 Home 鍵則是直接呼叫 Launcher 到當前畫面, 沒有經過關閉原來軟件的程序. 本來的軟件會隱藏到背景當中繼續運作, 如有資料傳輸的話會繼續其工作, 直至資源不足 - 系統必需回收資源以供其他軟件使用時才會關閉軟件. 即 Back 鍵適合使用完該軟件, 並短時間內不會啟動. Home 鍵則適合短時間內會再使用軟件或要把軟件放到背景中繼續運作時用.

簡單總結:

Back:
- 在主介面中會關閉當前軟件
- 在軟件 副頁面 時, 會返回上一頁/返回主介面
- 當軟件關閉後, 下次啟動時需要重新載入
- 適合使用完該軟件, 並短時間內不會再啟動
- 收藏鍵盤

Home:
- 在軟件使用中, 不論在主介面或副頁面, 都會即時帶出 Launcher
- 軟件只是隱藏到背景當中繼續運作
- 軟件隱藏中並再次啟動時,系統只會把軟件放回前景, 不會重新載入
- 軟件隱藏太久或資源不足時, 系統會自動關閉並回收所用資源, 那重新啟動時便要重新載入
- 適合會於短時間內返回軟件, 節省重新載入時間
- 適合該軟件仍然在運作中, 並會於短時間內返回軟件, 完美運用 Android 多工優勢

那有沒有例外的情況呢? 有!

有些軟件不支援返回前景 / 隱藏到背景的動作, 其實是開發者強行每次啟動時都要重新載入, 那麼不論按 Back / Home 也不會有分別.

P.S. 如何啟動正在隱藏的軟件? 其實不論已關閉或正隱藏的軟件啟動方法都是一樣, 在 Launcher 中啟動或按最近使用紀錄按鈕叫出最近使用例表中啟動  ( 3.0 前的 Device 長按 Home)