2010年9月14日 星期二

Android 在高解析度畫面的處理方式

Samsung Galaxy Tab 採用 Android 作業系統後引起鄉民的廣大迴響,也值得 Android 開發者好好警惕,主要原因是 Android 原本就不是設計給平板電腦這類裝置使用,令人安心的大多數的應用程式仍然可以直接套用,潛在的問題也很容易解決。以下我們提出一個不只適用於平板電腦,也可以應用在各式各樣產品的解決方案:

這個平板電腦規格如下:
畫面解析度 1024x600,第一個有超過上千畫素的解析度大多數人都會抓住他的兩旁,橫著使用。

我們建議開發者花時間仔細研讀 supporting multiple screens 一文,我們也將會在持續改善該文章內容。Dan Morrill 的One Screen Turn Deserves Another 博客文章,也可以適用於直立式使用的情況。

像素密度的意義

當要開發應用程式的外觀時,主要是設計版面跟使用的圖資,而這兩項外觀重要原素就牽扯到螢幕的像素密度、尺吋大小、橫放或直立使用三因素。如果想要設及時髦又漂亮的外觀設計,則必須要完全理解這三個元素。

在三星的這個例子中有另一個意外的地方是他採用遠超過 Android 設定的 170 DPI,當然這是為了在該平板電腦上有更好畫面的設定。在大螢幕上如果設計不良很容易讓螢幕空曠區太大,中等解析度時按鍵與圖標之間距離太遠,但在高解析度時 Android 框架的擴展方式讓該產品畫面更漂亮。

身為業餘攝影師我想到拍照時的光圈、ISO、快門設定問題。當你想拍攝一位舞者,就必須加大光圈、ISO 調得更敏銳、快門加速等技巧。同樣的三星的 Galaxy Tab 使用較大螢幕就必須用更高解析度。

好消息是 Android 框架的程式碼判斷足夠判斷出該產品的最佳畫面,LifeSaver2 的應用程式畫面表現很棒,上面是在 Nexus One 下圖則是Galaxy Tab:




只要你確保提供三種不同解析度圖資,Android 框架就可以找到適合的擴展方式。
可能出錯的地方(你無法預期應用程式跑在哪一種螢幕上)

採用絕對值的 layout
採用絕對值畫素而非無關像素密度的設定
自行計算螢幕大小、自行載入圖資、而非經由框架載入

參考 supports-screens 我們建議你採用以下設定:

<supports-screens android:largeScreens="true" android:anyDensity="true" />

在 API 版本 4 以前的預設值都是 false,如此設定後在大多情況下都可以得到理想的畫面輸出。

測試

如果要確保畫面輸出,最好還是用模擬器輸出測試過,三星也有提供相關的外掛(add-on)讓你更容易測試。

幹嘛管這麼多?

主要是因為 Android 本來就只是設計給手機用的平台,為了因應現在的應用變化,才加入後續的調整與應用。但也拓展了你的應用程式可以應用在各種產品上的可能性。

原文網址:

Screen Geometry Fun