移動開發的屏幕適配是一個難題,特別是Android的手機種類太多,屏幕差異性很大。iOS在iPhone6之後也增加了很多種解析度,也需要更多的考慮屏幕適配問題。不同的系統都提供了不少屏幕適配的機制和方法,但是需要很多繁瑣細緻的設計和實現,DeviceOne統一了屏幕適配的方式,開發者無需對這種細節了 ...
移動開發的屏幕適配是一個難題,特別是Android的手機種類太多,屏幕差異性很大。iOS在iPhone6之後也增加了很多種解析度,也需要更多的考慮屏幕適配問題。不同的系統都提供了不少屏幕適配的機制和方法,但是需要很多繁瑣細緻的設計和實現,DeviceOne統一了屏幕適配的方式,開發者無需對這種細節瞭解。
Deviceone提供3種級別的屏幕適配,絕大部分情況,開發者使用DeviceOne開發App完全不需特意去考慮屏幕適配,Deviceone的運行引擎可以確保在任何一款設備上自動適配屏幕大小。
1.基本適配方式:
DeviceOne的基本適配本質上就是等比縮放,用戶在DeviceOne Studio的設計區通過可視化方式拖拽UI組件,其設計區是有大小的,UI組件的寬和設計區的寬,高和設計區的高的比值是不會變的,永遠是w2/w1和h2/h1,到不同的手機上運行,會根據屏幕的解析度自動等比例縮放從而達到屏幕的適配。同時字體的大小在不同的屏幕上也會自動適配。如下圖:
自動適配滿足大部分的UI展示,開發者無須關註適配問題。但是有一些特殊情況,比如按鈕在設計區是正圓,在不同的手機屏幕上就有可能會變成橢圓,這一點不能依靠基本的適配方式,DeviceOne也提供了很簡單的方法來解決這個問題。
2. ALayout內的不變形縮放:
這種適配機制就是解決上面提到的局部變形問題而設計的。ALayout是DeviceOne的一個基礎佈局,通常它也是一個基礎UI,也適應於基礎適配,也就是等比例縮放。但是它有一個屬性isStretch
表明ALayout里的子UI是否遵循等比例縮放,預設這個屬性是true,如果設置為false,則這個ALayout自身包括它內部的所有子UI不再遵循等比例縮放的原則,而是遵循最大比例縮放原則,比如上面的例子,如果正圓所在的ALayout的isStretch
屬性設置為false,則這個正圓在手機屏幕上的縮放會先保證寬高比也就是1不變的基礎上,再在ALayout內部實行最大比例縮放,從而保證在任何手機屏幕上都是正圓。如下圖,我們可以看到正圓在設計區和移動屏幕區都是正圓:
以上二種適配機制能解決絕大部分的適配問題,開發者並不需要做太多工作。但是我們還提供一個更精確的適配方式,但是需要開發者做不少額外的工作。
3. 特殊頁面適配機制:
我們DeviceOne還提供另外一種手動適配的方案,能讓部分屏幕尺寸不是主流比例的設備也能完美展現UI頁面。
下麵說明一下這種方案:
在新建應用時,我們提供選擇一種最佳適配機型的屏幕尺寸,預設是iPhone6的750x1334的大小,此時所有.ui頁面的尺寸都是按照這個比例來佈局的;此時用一臺iPhone4的設備來安裝該應用,在某些視覺效果要求極高的頁面中,比如應用的引導頁source://index.ui
會看出在iPhone4的屏幕中頁面稍微有些擠壓變形,因為iPhone4的屏幕尺寸是640x960的,如果想要完美適配iPhone4,可以在需要增加手動適配的頁面同級目錄下增加對於iPhone4的適配頁面,只要在頁面名稱後加上下劃線和需要適配屏幕的尺寸即可,即在source://
目錄下增加與index.ui
同級的index_640x960.ui
,裡面的展示換成根據iPhone4尺寸定製的內容就完成了手動適配:
註意是640x960而不是640*960
只要手機是640x960解析度的屏幕進入應用時,就會自動去解析index_640x960.ui
,而不是去解析index.ui
,從而達到完美的適配效果;更棒的是,增加的手動適配頁面與原頁面是公用一套邏輯代碼的,不需要寫兩套代碼,在index.ui.js
里調用的API,在index_640x960.ui
頁面也可調用,只需在index.ui.js
中定義好即可。