溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

跨平臺移動框架iMAG開發(fā)入門

發(fā)布時間:2020-08-07 18:59:54 來源:網(wǎng)絡 閱讀:443 作者:qyikp 欄目:移動開發(fā)

iMAG是一個非常簡潔高效的移動跨平臺開發(fā)框架,開發(fā)一次可以同時兼容Android和iOS平臺,有點兒Web開發(fā)基礎就能很快上手。當前移動端跨平臺開發(fā)的框架有很多,但用iMAG還有一個好處,就是用iMAG開發(fā)出的App是原生的。iMAG采用XML + JavaScript(配置 + 腳本)的開發(fā)方式,它的原理是將符合iMAG開發(fā)規(guī)范的XML文件解釋成對應的原生應用代碼來執(zhí)行。原生跨平臺開發(fā),iMAG App具有和Native App相同的性能和用戶體驗,因此相比PhoneGap、JQuery Mobile等Web開發(fā)框架iMAG適用于對性能要求較高的情況。      

雖然是原生又跨平臺,iMAG的開發(fā)環(huán)境卻很簡單,不需要在本地電腦上安裝或部署,在iMAG的官網(wǎng)平臺www.imagapp.com注冊一個免費帳號,馬上就可以開始開發(fā)了。注冊完登錄,安裝網(wǎng)站提示先在手機上安裝iMAG開發(fā)版的客戶端,然后打開iMAG的在線開發(fā)工具開始開發(fā)。

跨平臺移動框架iMAG開發(fā)入門


登錄iMAG開發(fā)版客戶端,在iMAG在線開發(fā)工具里編輯XML文件并保存,在手機上刷新頁面就能看到效果。

Hello World

下面來看這個hello world的例子。iMAG框架使用的XML格式的文件來描述UI,因此代碼必須符合XML格式的規(guī)范,一套代碼在Android和iOS平臺都能運行,而且展現(xiàn)出來的是原生UI效果。

跨平臺移動框架iMAG開發(fā)入門


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


其中imag是XML文檔的根節(jié)點,page包含整個頁面的內(nèi)容,是對頁面的抽象和封裝。上面的代碼中page包括title和content兩個部分,分別是頁面的標題和內(nèi)容。title是頁面標題導航欄,有center、left、right三個子節(jié)點,分別用來在title上居中、居左和居右來擺放文本和按鈕。content里有個list控件,用來展示“Hello World!”文本內(nèi)容,list的type屬性是"group",表示是一個分組列表。

iMAG在Android和iOS系統(tǒng)上會將XML解釋成各自的本地代碼,比如在Android上label會解釋成原生的TextView,而在iOS上則會解釋成對應的UILabel。因此不同于HTML,在iMAG框架里文本內(nèi)容只能在放在label標簽里,而不能任意放置。

基本頁面布局

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

<?xml version="1.0" encoding="utf-8"?>    
<imag>    
    <page>    
        <title >    
            <center><label>標題</label></center>    
        </title>    
        <header >    
            <label>置頂</label>    
        </header>    
        <content >    
            <label>內(nèi)容</label>    
        </content>    
        <footer >    
            <label>置底</label>    
        </footer>    
    </page>    
</imag>


跨平臺移動框架iMAG開發(fā)入門


header中的內(nèi)容會始終顯示在屏幕上頂部,content是頁面的主要內(nèi)容,footer的內(nèi)容在屏幕中置底顯示。

列表布局

通常頁面內(nèi)容的布局可以通過列表控件list來實現(xiàn),如下面的例子:

<?xml version="1.0" encoding="utf-8"?>  
<imag>  
    <page>  
        <title >  
            <center><label>費用報銷單</label></center>  
        </title>  
        <content>  
            <list type="group">  
                <item >  
                    <col>  
                        <row><label >單據(jù)編號:</label></row>  
                    </col>  
                    <col>  
                        <row><label>BXD-20120824-0250</label></row>  
                    </col>  
                </item>  
                <item >  
                    <col>  
                       <row><label >主題:</label></row>  
                    </col>                      
                    <col>  
                       <row><label>客戶招待報銷單</label></row>  
                    </col>  
                </item>  
                <item >  
                    <col>  
                      <row><label >申請公司</label></row>  
                    </col>                      
                    <col>  
                       <row><label>2012-08-24</label></row>  
                    </col>  
                </item>  
                <item >  
                    <col>  
                        <row><label >職位:</label></row>  
                    </col>                      
                    <col>  
                        <row><label>財務總監(jiān)</label></row>  
                    </col>  
                </item>  
            </list>   
        </content>  
    </page>  
</imag>

跨平臺移動框架iMAG開發(fā)入門


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

用list控件可以實現(xiàn)更復雜和細致的布局效果,下面是用iMAG框架開發(fā)的微博App頁面:

跨平臺移動框架iMAG開發(fā)入門


UI控件分類

UI控件分類iMAG框架的UI控件可以分為三類:內(nèi)容控件、表單控件、布局控件。
內(nèi)容控件:用來展示文字、圖片等內(nèi)容信息。
表單控件:用來接收用戶輸入的表單信息。
布局控件:用來控制頁面內(nèi)容的布局和擺放。

iMAG框架的UI控件列表:

分類名稱標簽描述
內(nèi)容控件文本控件label用來顯示文本內(nèi)容
網(wǎng)頁控件web用來顯示網(wǎng)頁內(nèi)容
按鈕控件button用來顯示按鈕
圖標控件icon用來顯示資源圖片或手機本地圖片
圖片控件p_w_picpath用來顯示網(wǎng)絡圖片
圖組控件slidep_w_picpath用來顯示一組圖片
進度條控件progress用來顯示進度條
日歷控件calendar用來顯示日歷,可以用于開發(fā)日程管理功能
地圖控件bmap用來顯示地圖,可以在地圖上標注地理位置信息。
表單控件表單控件form用來表示表單,表單項都包含在form標簽內(nèi)
隱藏域控件input-hidden用來表示表單隱藏域
文本輸入框控件input-text用來輸入單行文本內(nèi)容
密碼輸入框控件input-password用來輸入密碼
數(shù)字輸入框控件input-number用來輸入數(shù)字
郵件地址輸入框控件input-email用來輸入郵件地址
日期輸入框控件input-date用來輸入日期
時間輸入框控件input-time用來輸入時間
搜索框控件input-search用來輸入搜索內(nèi)容
文件選擇框控件input-file用來選擇文件
表單提交按鈕input-submit用來點擊提交表單
文本域控件textarea用來輸入多行文本
單選框控件select用來選取單個值
單選按鈕控件radio用來選取單個值
單選按鈕組控件radios用來選取單個值
多選按鈕控件checkbox用來選取多個值
表單驗證控件validation用來驗證表單數(shù)據(jù)
布局控件頁面控件page包含當前頁面的所有內(nèi)容
標題控件title用來顯示頁面標題欄
置頂控件header內(nèi)容在屏幕上置頂
置底控件footer內(nèi)容在屏幕上置底
內(nèi)容控件content包含頁面的內(nèi)容部分
內(nèi)容組控件contents多個content的組
標簽欄控件tabbar標簽欄主要用于content內(nèi)容的切換
標簽頁控件tabs以標簽頁的形式來顯示內(nèi)容
單行控件row用來顯示一行控件內(nèi)容
列表控件list以列表的形式來顯示內(nèi)容
網(wǎng)格控件grid以網(wǎng)格的形式來顯示內(nèi)容
多屏幕控件screens以多個屏幕的形式來顯示內(nèi)容
系統(tǒng)菜單控件menu用來顯示系統(tǒng)菜單
彈出菜單控件actionmenu用來顯示彈出菜單
導航菜單控件navmenu用來顯示導航菜單
彈跳菜單控件pathmenu用來顯示彈跳菜單
側滑菜單控件slidingmenu用來顯示側滑菜單

在iMAG中通過對這些控件進行簡單的組合和設置,就可以開發(fā)出各種效果的UI頁面。

動態(tài)腳本

iMAG框架支持通過標準的Javascript語言來操作UI控件對象,完成動態(tài)交互功能,比如:

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

上面的代碼會在頁面初始化時觸發(fā)onload事件,調(diào)用JavaScript方法彈出一個alert對話框。

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

 iMAG中定義的MOM對象:

● $page:封裝了頁面UI相關的屬性和方法。
● $http:封裝了http操作相關的方法。
● $phone:封裝了手機本地功能調(diào)用相關的方法。
● $util:封裝了一些實用工具方法。

通過這些內(nèi)置的JavaScript對象和方法,iMAG框架可以輕松調(diào)用手機本地功能,比如GPS定位。

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

上面的$phone.locate()方法會啟動手機GPS定位功能,定位成功之后回調(diào)success方法,顯示出經(jīng)緯度信息。

iMAG框架支持動態(tài)創(chuàng)建UI控件,要用到$C()方法,參數(shù)是XML格式的文檔,如:

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

上面的方法通過XML動態(tài)創(chuàng)建了一個button控件,并在頁面的content里顯示。

iMAG框架還可以使用Ajax請求來獲取數(shù)據(jù),如:

$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()方法會發(fā)起一個異步調(diào)用的Ajax請求,服務器返回的JSON數(shù)據(jù)格式如下:

{text:'<font color="blue">JSON數(shù)據(jù)</font>'}

從服務器端動態(tài)獲取的JSON數(shù)據(jù)用JSON.parse()方法解析,然后進行處理和顯示。因為iMAG底層是原生代碼非瀏覽器環(huán)境,因此在iMAG框架里調(diào)用Ajax請求沒有跨域問題。

使用HMTL5

雖然使用HTML5不是iMAG開發(fā)所必須的,但iMAG通過web控件的方式對HTML5進行了很好的支持和兼容,并且提供了腳本機制使得web可以同原生控件進行內(nèi)外交互相互調(diào)用,這在開發(fā)網(wǎng)站類應用的時候會比較有用。

使用Web控件顯示HTML網(wǎng)頁的例子:

<?xml version="1.0" encoding="utf-8"?>
<imag>
    <page >
        <title>
            <center>
                <label>網(wǎng)頁控件</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>

跨平臺移動框架iMAG開發(fā)入門


這里顯示的table表格是標準的HTML,因為內(nèi)嵌的是HTML標簽,所以這里必須使用CDATA來進行標記。

適配不同屏幕

iMAG已經(jīng)屏蔽了不同平臺不同分辨率手機之間的差異,按照iMAG規(guī)范開發(fā)出的移動應用自動適配不同手機。對于不同平臺不同分辨率的屏幕,也需要使用多套不同大小的圖片去適配,這些圖片只需要按照規(guī)則放到相應的服務器目錄下即可,手機客戶端會自動下載與之相適配的圖片。

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

跨平臺移動框架iMAG開發(fā)入門


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

比如:<page>對于Android屏幕分辨率為800x480的手機bg.png圖片的目錄查找順序是:
/res/android/hdpi
/res/android/default
/res/default

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

可以看到這個查找順序是由內(nèi)向外的。
Android各個屏幕密度的取值如下:


密度ldpimdpihdpixhdpixxhdpi
密度值dip<140140<=dip<190190<=dip<280280<=dip<400400<=dip
分辨率240x320320x480480x800
480x854
720x12801080x1920
比例346812


可以根據(jù)比例來設計各種屏幕圖片的大?。罕热缫粋€圖片在hdpi上大小為48×48,那么在xhdpi上為64x64,在xxhdpi上為96x96(6:8:12)。


打包發(fā)布

App開發(fā)完成之后就是打包和發(fā)布,打包之前要先上傳自己的應用圖標和App啟動加載圖片,因為要適配不同分辨率的手機,圖片要上傳多套。iOS打包時還要上傳證書,這樣打包出來的App才能夠上傳到AppStore。

跨平臺移動框架iMAG開發(fā)入門

iMAG官網(wǎng)地址:http://www.imagapp.com

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI