跨平台移動架構iMAG開發入門

來源:互聯網
上載者:User

跨平台移動架構iMAG開發入門

iMAG是一個非常簡潔高效的移動跨平台開發架構,開發一次可以同時相容Android和iOS平台,有點兒Web開發基礎就能很快上手。當前移動端跨平台開發的架構有很多,但用iMAG還有一個好處,就是用iMAG開發出的App是原生的。iMAG採用XML + JavaScript(配置 + 指令碼)的開發方式,它的原理是將符合iMAG開發規範的XML檔案解釋成對應的原生應用代碼來執行。原生跨平台開發,iMAG App具有和Native App相同的效能和使用者體驗,因此相比PhoneGap、JQuery Mobile等Web開發架構iMAG適用於對效能要求較高的情況。      

雖然是原生又跨平台,iMAG的開發環境卻很簡單,不需要在本地電腦上安裝或部署,在iMAG的官網平台www.imagapp.com註冊一個免費帳號,馬上就可以開始開發了。註冊完登入,安裝網站提示先在手機上安裝iMAG開發版的用戶端,然後開啟iMAG的線上開發工具開始開發。


登入iMAG開發版用戶端,在iMAG線上開發工具裡編輯XML檔案並儲存,在手機上重新整理頁面就能看到效果。

Hello World

下面來看這個hello world的例子。iMAG架構使用的XML格式的檔案來描述UI,因此代碼必須符合XML格式的規範,一套代碼在Android和iOS平台都能運行,而且展現出來的是原生UI效果。


<?xml version="1.0" encoding="utf-8"?><imag>    <page>        <title style="background:#6495ED">            <center><label>測試App</label></center>        </title>        <content>            <list type="group">                <item>                    <label>Hello World!</label>                </item>            </list>        </content>    </page></imag>

其中<imag>是XML文檔的根節點,<page>包含整個頁面的內容,是對頁面的抽象和封裝。上面的代碼中<page>包括<title>和<content>兩個部分,分別是頁面的標題和內容。<title>是頁面標題導覽列,有<center>、<left>、<right>三個子節點,分別用來在title上置中、居左和居右來擺放文本和按鈕。<content>裡有個<list>控制項,用來展示“Hello World!”常值內容,list的type屬性是"group",表示是一個分組列表。

iMAG在Android和iOS系統上會將XML解釋成各自的本地代碼,比如在Android上<label>會解釋成原生的TextView,而在iOS上則會解釋成對應的UILabel。因此不同於HTML,在iMAG架構裡常值內容只能在放在label標籤裡,而不能任意放置。

基本頁面布局

單個頁面通常由title, header, content, footer組成:

<?xml version="1.0" encoding="utf-8"?>    <imag>        <page>            <title style="background:#999999">                <center><label>標題</label></center>            </title>            <header style="background:#cccccc;padding:10">                <label>置頂</label>            </header>            <content style="background:white">                <label>內容</label>            </content>            <footer style="background:#cccccc;padding:10">                <label>置底</label>            </footer>        </page>    </imag>    

<header>中的內容會始終顯示在螢幕上頂部,<content>是頁面的主要內容,<footer>的內容在螢幕中置底顯示。

列表布局

通常頁面內容的布局可以通過清單控制項list來實現,如下面的例子:


其中<item>是清單項目,每個item的都可以有自己的布局,在<item>中,<col>表示一列,<row>表示一行。這裡list有點兒類似於HTML裡的table,不同的是table是先有行(tr)再有列(td),而list是先有列(col)再有行(row)。col-width樣式用來設定多列的跨度,多個用逗號“,”分割,星號“*”表示寬度自適應。

用list控制項可以實現更複雜和細緻的布局效果,下面是用iMAG架構開發的微博App頁面:


UI控制項分類

UI控制項分類iMAG架構的UI控制項可以分為三類:內容控制項、表單控制項、布局控制項。
內容控制項:用來展示文字、圖片等內容資訊。
表單控制項:用來接收使用者輸入的表單資訊。
布局控制項:用來控制頁面內容的布局和擺放。

iMAG架構的UI控制項列表:

分類 名稱 標籤 描述
內容控制項 文本控制項 label 用來顯示常值內容
網頁控制項 web 用來顯示網頁內容
按鈕控制項 button 用來顯示按鈕
表徵圖控制項 icon 用來顯示資源圖片或手機本地圖片
圖片控制項 image 用來顯示網狀圖片
圖組控制項 slideimage 用來顯示一組圖片
進度條控制項 progress 用來顯示進度條
日曆控制項 calendar 用來顯示日曆,可以用於開發議程管理功能
地圖控制項 bmap 用來顯示地圖,可以在地圖上標註地理位置資訊。
表單控制項 表單控制項 form 用來表示表單,表單項都包含在form標籤內
隱藏欄位控制項 input-hidden 用來表示表單隱藏欄位
文本輸入框控制項 input-text 用來輸入單行常值內容
密碼輸入框控制項 input-password 用來輸入密碼
數字輸入框控制項 input-number 用來輸入數字
郵件地址輸入框控制項 input-email 用來輸入郵件地址
日期輸入框控制項 input-date 用來輸入日期
時間輸入框控制項 input-time 用來輸入時間
搜尋方塊控制項 input-search 用來輸入搜尋內容
檔案選擇框控制項 input-file 用來選擇檔案
表單提交按鈕 input-submit 用來點擊提交表單
文本域控制項 textarea 用來輸入多行文本
單選框控制項 select 用來選取單個值
選項按鈕控制項 radio 用來選取單個值
選項按鈕組控制項 radios 用來選取單個值
多選按鈕控制項 checkbox 用來選取多個值
表單驗證控制項 validation 用來驗證表單資料
布局控制項 頁面控制項 page 包含當前頁面的所有內容
標題控制項 title 用來顯示頁面標題列
置頂控制項 header 內容在螢幕上置頂
置底控制項 footer 內容在螢幕上置底
內容控制項 content 包含頁面的內容部分
內容組控制項 contents 多個content的組
標籤欄控制項 tabbar 標籤欄主要用於content內容的切換
標籤頁控制項 tabs 以標籤頁的形式來顯示內容
單行控制項 row 用來顯示一行控制項內容
清單控制項 list 以列表的形式來顯示內容
網格控制項 grid 以網格的形式來顯示內容
多螢幕控制項 screens 以多個螢幕的形式來顯示內容
系統功能表控制項 menu 用來顯示系統菜單
快顯功能表控制項 actionmenu 用來顯示快顯功能表
導覽功能表控制項 navmenu 用來顯示導覽功能表
彈跳菜單控制項 pathmenu 用來顯示彈跳菜單
側滑菜單控制項 slidingmenu 用來顯示側滑菜單

在iMAG中通過對這些控制項進行簡單的組合和設定,就可以開發出各種效果的UI頁面。

動態指令碼

iMAG架構支援通過標準的Javascript語言來操作UI控制項對象,完成動態互動功能,比如:

<?xml version="1.0" encoding="utf-8"?><imag>  <script>  <![CDATA[    $page.onload = function() {        alert('hello world!');    }  ]]>  </script>  <page>  </page></imag>

上面的代碼會在頁面初始化時觸發onload事件,調用JavaScript方法彈出一個alert對話方塊。

這裡有必要解釋一下Javascript的概念,完整的JavaScript實現是由以下3個不同部分組成的:核心(ECMAScript)、文件物件模型(Document Object Model,簡稱DOM)、瀏覽器物件模型(Browser Object Model,簡稱BOM)。對於iMAG而言實際上只用到了ECMAScript,因為iMAG並不支援DOM和BOM。這是因為移動UI往往頁面簡潔元素較少,沒有必要引入複雜的DOM操作,而且DOM API本身設計糟糕,對開發人員不夠友好。而BOM裡的Window, Navigator, History這些對象對於行動裝置 App也不再適用,iMAG有自己的MOM(Mobile Object Model)。

 iMAG中定義的MOM對象:

● $page:封裝了頁面UI相關的屬性和方法。
● $http:封裝了http操作相關的方法。
● $phone:封裝了手機本地功能調用相關的方法。
● $util:封裝了一些工具 + 生產力方法。

通過這些內建的JavaScript對象和方法,iMAG架構可以輕鬆調用手機本地功能,比如GPS定位。

$phone.locate({   provider: 'gps',   success: function(location) {       alert('GPS定位成功,經緯度:' + location.latitude + ', ' + location.longitude);   },   error: function() {       alert('GPS定位失敗!');   }});

上面的$phone.locate()方法會啟動手機GPS定位功能,定位成功之後回調success方法,顯示出經緯度資訊。

iMAG架構支援動態建立UI控制項,要用到$C()方法,參數是XML格式的文檔,如:

var button = $C('<button id="test_button">按鈕</button>');$('content').add(button);

上面的方法通過XML動態建立了一個button控制項,並在頁面的content裡顯示。

iMAG架構還可以使用Ajax請求來擷取資料,如:

$http.get('http://www.imagapp.com/download/data/http_json_ret.jsp', function(json) {    var obj = JSON.parse(json);    $('test_label').text = obj.text;});

$http.get()方法會發起一個非同步呼叫的Ajax請求,伺服器返回的JSON資料格式如下:

{text:'<font color="blue">JSON資料</font>'}

從伺服器端動態擷取的JSON資料用JSON.parse()方法解析,然後進行處理和顯示。因為iMAG底層是原生代碼非瀏覽器環境,因此在iMAG架構裡調用Ajax請求沒有跨域問題。

使用HMTL5

雖然使用HTML5不是iMAG開發所必須的,但iMAG通過web控制項的方式對HTML5進行了很好的支援和相容,並且提供了指令碼機制使得web可以同原生控制項進行內外互動相互調用,這在開發網站類應用的時候會比較有用。

使用Web控制項顯示HTML網頁的例子:

<?xml version="1.0" encoding="utf-8"?><imag>    <page style="background:white">        <title>            <center>                <label>網頁控制項</label>            </center>        </title>        <content><web><![CDATA[  <style type="text/css">  table.altrowstable {      font-family: verdana,arial,sans-serif;      font-size:11px;      color:#333333;      border-width: 1px;      border-color: #a9c6c9;      border-collapse: collapse;  }     table.altrowstable th {      border-width: 1px;      padding: 8px;      border-style: solid;      border-color: #a9c6c9;  }     table.altrowstable td {      border-width: 1px;      padding: 8px;      border-style: solid;      border-color: #a9c6c9;  }     .oddrowcolor {      background-color:#d4e3e5;  }     .evenrowcolor {      background-color:#c3dde0;  }  </style>  <table class="altrowstable" id="alternatecolor">      <tr class="evenrowcolor">          <th>Info Header 1</th><th>Info Header 2</th><th>Info Header 3</th>      </tr>      <tr class="oddrowcolor">          <td<Text 1A</td><td>Text 1B</td><td>Text 1C</td>      </tr>      <tr class="evenrowcolor">          <td>Text 2A</td><td>Text 2B</td><td>Text 2C</td>      </tr>      <tr class="oddrowcolor">          <td<Text 3A</td><td>Text 3B</td><td>Text 3C</td>      </tr>      <tr class="evenrowcolor">          <td>Text 4A</td><td>Text 4B</td><td>Text 4C</td>      </tr>      <tr class="oddrowcolor">          <td>Text 5A</td><td>Text 5B</td><td>Text 5C</td>      </tr>  </table>]]></web>        </content>    </page></imag>

這裡顯示的table表格是標準的HTML,因為內嵌的是HTML標籤,所以這裡必須使用CDATA來進行標記。

適配不同螢幕

iMAG已經屏蔽了不同平台不同解析度手機之間的差異,按照iMAG規範開發出的行動裝置 App自動適配不同手機。對於不同平台不同解析度的螢幕,也需要使用多套不同大小的圖片去適配,這些圖片只需要按照規則放到相應的伺服器目錄下即可,手機用戶端會自動下載與之相適配的圖片。

伺服器端圖片資來源目錄結構如下:

Android圖片資來源目錄是以螢幕密度(density)來區分,而iOS是以螢幕解析度來區分。anroid和ios目錄下分別有一個default目錄,當具體螢幕解析度或螢幕密度的圖片找不到時會讀取這個default目錄中的相應的圖片。

比如:<pagestyle="background:bg.png">對於Android螢幕解析度為800x480的手機bg.png圖片的目錄尋找順序是:
/res/android/hdpi
/res/android/default
/res/default

對於iPhone5手機目錄尋找順序是:
/res/ios/640x1136
/res/ios/default
/res/default

可以看到這個尋找順序是由內向外的。
Android各個螢幕密度的取值如下:

密度 ldpi mdpi hdpi xhdpi xxhdpi
密度值 dip<140 140<=dip<190 190<=dip<280 280<=dip<400 400<=dip
解析度 240x320 320x480 480x800
480x854
720x1280 1080x1920
比例 3 4 6 8 12

可以根據比例來設計各種螢幕圖片的大小:比如一個圖片在hdpi上大小為48×48,那麼在xhdpi上為64x64,在xxhdpi上為96x96(6:8:12)。

打包發布

App開發完成之後就是打包和發布,打包之前要先上傳自己的應用表徵圖和App啟動載入圖片,因為要適配不同解析度的手機,圖片要上傳多套。iOS打包時還要上傳認證,這樣打包出來的App才能夠上傳到AppStore。



iMAG官網地址:http://www.imagapp.com

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.