`
小te
  • 浏览: 2506 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

跨平台移动框架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来实现,如下面的例子:

<?xml version="1.0" encoding="utf-8"?>  
<imag>  
    <page>  
        <title style="background:gradient(#444444)">  
            <center><label>费用报销单</label></center>  
        </title>  
        <content>  
            <list type="group">  
                <item style="col-width:100,*">  
                    <col>  
                        <row><label style="color:gray">单据编号:</label></row>  
                    </col>  
                    <col>  
                        <row><label>BXD-20120824-0250</label></row>  
                    </col>  
                </item>  
                <item style="col-width:100,*">  
                    <col>  
                       <row><label style="color:gray">主题:</label></row>  
                    </col>                      
                    <col>  
                       <row><label>客户招待报销单</label></row>  
                    </col>  
                </item>  
                <item style="col-width:100,*">  
                    <col>  
                      <row><label style="color:gray">申请公司</label></row>  
                    </col>                      
                    <col>  
                       <row><label>2012-08-24</label></row>  
                    </col>  
                </item>  
                <item style="col-width:100,*">  
                    <col>  
                        <row><label style="color:gray">职位:</label></row>  
                    </col>                      
                    <col>  
                        <row><label>财务总监</label></row>  
                    </col>  
                </item>  
            </list>   
        </content>  
    </page>  
</imag>    

 

其中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这些对象对于移动应用也不再适用,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规范开发出的移动应用自动适配不同手机。对于不同平台不同分辨率的屏幕,也需要使用多套不同大小的图片去适配,这些图片只需要按照规则放到相应的服务器目录下即可,手机客户端会自动下载与之相适配的图片。

服务器端图片资源目录结构如下:

 

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

分享到:
评论

相关推荐

    imag.js|教你如何智做原生APP

    imag.js可能是JavaScript的一个库或者框架,专为创建移动应用设计,它允许开发者用JavaScript编写代码,同时能够生成接近原生性能的应用。 【描述】虽然描述部分为空,但我们可以通过博文链接...

    imag推送程序

    "imag推送程序"是针对iOS平台的一个特定应用组件,它主要负责处理应用程序内部的消息推送功能。在iOS系统中,消息推送通常通过Apple Push Notification Service (APNS)来实现,但开发者可能需要定制化推送服务或者...

    PyPI 官网下载 | imag3-1.1.0.tar.gz

    在Python编程世界中,PyPI(Python Package Index)是开发者们获取和分享软件包的重要平台。今天我们将聚焦于一个名为"imag3"的Python库,其最新版本1.1.0可以通过PyPI官网进行下载,文件形式为`imag3-1.1.0.tar.gz`...

    吸附薄液膜下PCB-ImAg和PCB-HASL电化学迁移腐蚀行为与机理(英文).pdf

    这些知识点不仅为专业人士提供了深入研究PCB腐蚀行为与机理的参考,也对于那些从事硬件开发、电子元件制造与应用的工程师和技术人员来说是重要的实践指导。这表明了在电子行业领域,腐蚀问题的研究是确保产品可靠性...

    漂亮imag图片

    在这个“漂亮imag图片”主题中,我们可以深入探讨图像处理的一些关键知识点。 首先,我们需要理解“imag”可能是指图像或者图片的简称。在计算机科学中,图像通常以数字形式存储,由像素组成,每个像素代表一个颜色...

    cut_imag.7z

    《win截屏工具cut_imag.7z详解及应用》 截屏工具在现代计算机使用中扮演着不可或缺的角色,尤其在信息分享、问题反馈以及教学演示等场景中,它提供了便捷的方式来捕捉屏幕上的图像。"cut_imag.7z"便是一款针对...

    4_Add2Imag.zip_thisimag

    OpenCV(开源计算机视觉库)是一个强大的跨平台库,广泛用于图像处理、计算机视觉以及机器学习等领域。 【描述】"this is an opencv project" 暗示了这个项目是基于OpenCV进行开发的,可能包含了使用OpenCV库的各种...

    基于SSM框架+mysql实现客户管理系统源码+项目说明.zip

    【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程...这是一个入门级的SSM框架运用,实现了基本的客户管理系统功能,比较适合初级入门学习的朋友

    iMag杂志制作大师 .exe

    制作大师是一款非常好用的软件,可以制作精美的相册,很不错的。

    imag:imag-基于文本的个人信息管理套件

    通过使用文本格式存储数据,`imag` 提供了一种跨平台且独立于特定应用的解决方案。这意味着用户可以自由地选择编辑器来查看和编辑数据,而且不用担心数据被特定软件锁定。 **pim(个人信息管理)** 个人信息管理...

    VTK用户开发手册(11版)

    4. CMake工具:CMake是一个跨平台的自动化构建系统,它在VTK用户开发手册中有专门的章节介绍。因为它是编译和安装VTK所必须了解的工具,用户可以通过这部分内容来掌握如何使用CMake来管理软件的构建过程。 5. 跨...

    Android 预约订餐order.zip

    综上所述,这个项目展示了Android平台上的应用程序开发技术,包括XML布局设计、JavaScript框架的集成以及针对生活服务类应用的界面和功能设计。开发者可以通过研究这个项目,学习如何创建具有预定功能的移动应用,...

    imag-popupmenu.zip

    在Android开发中,PopupMenu是一个非常实用的组件,它允许我们创建从特定视图弹出的下拉菜单。"imag-popupmenu.zip"这个压缩包显然包含了一个关于如何在Android应用中绘制多个PopupMenus的示例。下面我们将深入探讨...

    MATLAB入门教程.pdf

    MATLAB入门教程 MATLAB是一种高效的计算软件,广泛应用于科学计算、数据分析、可视化和算法开发等领域。下面将对MATLAB的基本知识、运算符号、数学函数、矩阵运算、查询命令等进行详细的介绍。 一、基本知识 ...

    matlab imag quality measurement

    This is an implementation of the algorithm for calculating the Structural SIMilarity (SSIM) index between two images

    小白python入门笔记

    【Python入门笔记】这篇资源是针对初学者设计的,旨在帮助你快速掌握Python的基础知识,特别是使用turtle库进行图形绘制。Python是一种高级编程语言,它与Perl、C和Java等语言有共通之处,但也有自己的特点。让我们...

    vmiso-VxWorks.rar_Vxworks iso_vmiso vxworks_vxworks_vxworks imag

    VxWorks是由Wind River Systems开发的一种实时操作系统(RTOS),它被广泛应用于嵌入式...使用该ISO文件,你可以在虚拟环境中模拟各种硬件平台,进行系统配置、软件调试以及兼容性测试,极大地提高了开发效率和灵活性。

    imag, 基于图像的个人信息管理套件.zip

    imag, 基于图像的个人信息管理套件 图像 imag-pim.orgimag 是一个命令行个人信息管理套件。 这个应用程序在早期开发中。 我们也有一些工作,但现在我们不考虑任何稳定或者有用的事情。 随便玩吧。 目标/什么是图像?...

Global site tag (gtag.js) - Google Analytics