imag.js是一种NativeScript形式的框架,它兼具 Web 应用的灵活和 Native 应用的高性能,可以使用 JavaScript 来开发 iOS 和 Android 原生应用。在 JavaScript 中用Native抽象操作系统原生的 UI 组件,并内置一体化框架,结合 Java、.Net、php和HTML5等主流开发语言/开发环境来写XML语法。敲一次代码,能够运行在多个平台上,平台同时融合第三方原生SDK以及模板服务

虽然是原生又跨平台,iMAG的开发环境却很简单,不需要在本地电脑上安装或部署,在iMAG的官网平台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组成:


<header>中的内容会始终显示在屏幕上顶部,<content>是页面的主要内容,<footer>的内容在屏幕中置底显示。

列表布局

通常页面内容的布局可以通过列表控件list来实现,如下面的例子:

其中<item>是列表项,每个item的都可以有自己的布局,在<item>中,<col>表示一列,<row>表示一行。这里list有点儿类似于HTML里的table,不同的是table是先有行(tr)再有列(td),而list是先有列(col)再有行(row)。col-width样式用来设置多列的跨度,多个用逗号“,”分割,星号“*”表示宽度自适应。用list控件可以实现更复杂和细致的布局效果。

UI控件分类

UI控件分类iMAG框架的UI控件可以分为三类:内容控件、表单控件、布局控件。
内容控件:用来展示文字、图片等内容信息。
表单控件:用来接收用户输入的表单信息。
布局控件:用来控制页面内容的布局和摆放。

iMAG框架的UI控件列表:

在iMAG中通过对这些控件进行简单的组合和设置,就可以开发出各种效果的UI页面。

动态脚本

iMAG框架支持通过标准的Javascript语言来操作UI控件对象,完成动态交互功能,比如:

上面的代码会在页面初始化时触发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()方法会启动手机GPS定位功能,定位成功之后回调success方法,显示出经纬度信息。

iMAG框架支持动态创建UI控件,要用到$C()方法,参数是XML格式的文档,如:

上面的方法通过XML动态创建了一个button控件,并在页面的content里显示。

iMAG框架还可以使用Ajax请求来获取数据,如:

$http.get()方法会发起一个异步调用的Ajax请求,服务器返回的JSON数据格式如下:

从服务器端动态获取的JSON数据用JSON.parse()方法解析,然后进行处理和显示。因为iMAG底层是原生代码非浏览器环境,因此在iMAG框架里调用Ajax请求没有跨域问题。

使用HMTL5

虽然使用HTML5不是iMAG开发所必须的,但iMAG通过web控件的方式对HTML5进行了很好的支持和兼容,并且提供了脚本机制使得web可以同原生控件进行内外交互相互调用,这在开发网站类应用的时候会比较有用。

使用Web控件显示HTML网页的例子:

这里显示的table表格是标准的HTML,因为内嵌的是HTML标签,所以这里必须使用CDATA来进行标记。

适配不同屏幕

iMAG已经屏蔽了不同平台不同分辨率手机之间的差异,按照iMAG规范开发出的移动应用自动适配不同手机。对于不同平台不同分辨率的屏幕,也需要使用多套不同大小的图片去适配,这些图片只需要按照规则放到相应的服务器目录下即可,手机客户端会自动下载与之相适配的图片。

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

Android图片资源目录是以屏幕密度(density)来区分,而iOS是以屏幕分辨率来区分。anroid和ios目录下分别有一个default目录,当具体屏幕分辨率或屏幕密度的图片找不到时会读取这个default目录中的相应的图片。

比如:<pagestyle=”background:bg.png”>对于Android屏幕分辨率为800×480的手机bg.png图片的目录查找顺序是:
/res/android/hdpi
/res/android/default
/res/default

对于iPhone5手机目录查找顺序是:
/res/ios/640×1136
/res/ios/default
/res/default

可以看到这个查找顺序是由内向外的。
Android各个屏幕密度的取值如下:

密度 ldpi mdpi hdpi xhdpi xxhdpi
密度值 dip<140 140<=dip<190 190<=dip<280 280<=dip<400 400<=dip
分辨率 240×320 320×480 480×800

480×854

720×1280 1080×1920
比例 3 4 6 8 12

可以根据比例来设计各种屏幕图片的大小:比如一个图片在hdpi上大小为48×48,那么在xhdpi上为64×64,在xxhdpi上为96×96(6:8:12)。

打包发布

App开发完成之后就是打包和发布,打包之前要先上传自己的应用图标和App启动加载图片,因为要适配不同分辨率的手机,图片要上传多套。iOS打包时还要上传证书,这样打包出来的App才能够上传到AppStore。

移动应用开发跨平台工具imag.js入门相关推荐

  1. IE开发人员工具之实用功能讲解

    F12快捷键调出开发人员工具 一.JS的内容格式化 1.内容较乱的js脚本: 2.勾选下面两项即可进行格式化脚本:自动换行与格式化JS 3.调理清楚的脚本 二:清空控制台 1.右键->清空 2. ...

  2. 认识Web前端、Web后端、桌面app和移动app新开发模式 - 基于Node.js环境和VS Code工具...

    认识Web.桌面和移动app新开发模式 - 基于Node.js环境和VS Code工具 一.开发环境的搭建(基于win10) 1.安装node.js和npm 到node.js官网下载安装包(包含npm ...

  3. 自动驾驶——标注工具(js+electron)的开发笔记(基于Create-React-App)

    目录 1 前言 2 框架选择 3 项目需求 3.1 自动更新 4 开发环境 4.1 Yarn安装 4.2 基础库安装 react-fontawesome 5 项目初始化&配置 5.1 使用cr ...

  4. React.js 入门与实战之开发适配PC端及移动端新闻头条平台课程上线了

    原文发表于我的技术博客 我在慕课网的「React.js 入门与实战之开发适配PC端及移动端新闻头条平台」课程已经上线了,文章中是目前整个课程的大纲,以后此课程还会保持持续更新,此大纲文档也会保持更新, ...

  5. 用JS开发跨平台桌面应用,从原理到实践

    导读 使用Electron开发客户端程序已经有一段时间了,整体感觉还是非常不错的,其中也遇到了一些坑点,本文是从[运行原理]到[实际应用]对Electron进行一次系统性的总结.[多图,长文预警-] ...

  6. Day51 前端开发 浮动、定位 、js入门

    Day51 前端开发 浮动.定位 .js入门 文章目录 Day51 前端开发 浮动.定位 .js入门 1.盒子模型 2.浮动布局 3.溢出属性 4.定位 4.1.z-index 5.纯手搭页面练习 6 ...

  7. 自动驾驶——标注工具(js+electron)的开发笔记(基于ERB)

    目录 1 前言 2 框架选择 2.1 Web学习资料--<Web Development for Beginners - A Curriculum> 3 项目需求 3.1 自动更新 4 A ...

  8. 《Node.js入门》Windows 7下Node.js Web开发环境搭建笔记

    最近想尝试一下在IBM Bluemix上使用Node.js创建Web应用程序,所以需要在本地搭建Node.js Web的开发测试环境. 这里讲的是Windows下的搭建方法,使用CentOS 的小伙伴 ...

  9. 高阶前端开发人员必备工具-Node.JS知识讲解

    想要成为一个"值钱"的高阶Web前端开发人才,Node.JS是必须要掌握的技术之一.今天小千就为大家详细讲解Node.JS的知识,让你完全了解Node.JS的前世今生. 1.说起N ...

最新文章

  1. vibe前景提取算法示例代码
  2. Python Module — WSME
  3. 我的ubuntu8.04安装经验 (转)
  4. 加密生成指定长度_那些奇奇怪怪的需求(一):PinyinHelper的使用、生成指定长度的随机码...
  5. 【原创】linux 批量清空文本内容
  6. JSP里的System.out.println
  7. 提升.NET应用程序启动速度
  8. java集合——数组列表(ArrayList)+散列集(HashSet)
  9. observable_Java Observable countObservers()方法与示例
  10. ps右键不显示编辑选项_PS基础教程|视图操作
  11. Java算法之寻找旋转数组中的最小值
  12. sdk 今日头条_Unity接入今日头条广告(激励广告)
  13. DNS是什么意思?DNS怎么设置?
  14. Qt for Python做一个虚拟示波器软件
  15. 迷途Emlog模板全站好看的透明变色模板+源码
  16. java计算器GUI科学型计算器
  17. 人身险信息库大数据开闸 消费者可货比三家
  18. 故事:坐在我隔壁的小王问我什么是HyperLogLog
  19. matlab中的graythresh函数的实例
  20. C语言基础篇02:单链表实现学生成绩管理系统

热门文章

  1. python给定一个整数n、判断n是否为素数_python判断所输入的任意一个正整数是否为素数的两种方法...
  2. 上网代理设置会被自动清空_关于代理被自动设置问题的排查
  3. 《HelloGitHub》第 40 期
  4. 北航计算机学院院长 孙,孙磊磊-北京航空航天大学计算机学院
  5. 【Python】pass,continue和break的区别
  6. 服务器固态硬盘无法识别硬盘,固态硬盘无法识别的原因及解决方法
  7. 数据中心服务器硬盘,PCI-E固态硬盘在数据中心的机会_希捷硬盘_服务器评测与技术-中关村在线...
  8. 19. RDMA之iWARP Soft-iWARP
  9. 【ybt高效进阶4-4-3】【luogu P4513】公园遛狗 / 小白逛公园
  10. SpringBoot 博客开发 个人学习(项目开始和前端页面)