整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

买手机看这份清单 绝对帮你省钱 至少省1000元+

近有很多朋友都问到我:我月薪3000块,是选择分期搞一部iPhoneX呢,还是老老实实的买一部华为/小米/魅族的千元机随便用一用?

让我们来深度剖析一下,为什么要选择iPhoneX?是因为小刘海?是因为全面屏?其实大部分要买iPhoneX的朋友主要是为了iPhone这个名字,用起来有面儿。

多少人选择iPhone X是为了苹果这个品牌?

作为一款旗舰手机,iPhone X的设计风格与前几代iPhone相比有了明显的变化,但价格偏高是不争的事实。一部iPhone X的售价可以与中高档笔记本电脑媲美。对于一些消费者来说,并不是因为不喜欢iPhone X而没入手,而是iPhone X给人的感觉价格太高了,名副其实的万元级别手机。

价格是影响消费者选购手机的重要因素。尤其是对于价格很高的手机来说,潜在消费群体会被压缩在一个相对较小的范围内。现如今,对于老百姓来说,花费接近1万元买一部手机还是比较奢侈的。

那么月薪3000选择哪一款手机最合适呢?其实选择国产手机是最合适的,因为经济实惠,不会给自己太大的负担和压力,如果是选择购买iPhoneX,月供就是每个月的痛苦,所以说不要为了一时的“面子”“爽快”,让自己陷入重重困境。下面笔者就针对不同人群,不同需求,给大家推荐几款值得购买的安卓手机,看看它们是不是符合你的需求。

选择一:买手机走心还是走肾?

推荐机型:vivo X20售价:2998元

vivo X20京东购买地址:https://item.jd.com/5025991.html

2017年下半年,全面屏逐渐成为智能手机的一项流行元素,各大厂商都纷纷推出了全面屏产品,而vivo X20正是其中的代表作之一。vivo官方宣称这款手机开启了屏幕2.0时代,在我们的实测中也发现vivo X20确实有不错的表现。苹果在今年也发布了全面屏新品iPhone X,只不过是售价过高,只适合极客用户购买。

vivo X20是一款采用全面屏设计的手机

现如今手机屏幕越做越大,特别是采用了全面屏设计之后,vivo X20更是搭载了一块6.01英寸18:9的Super AMOLED屏幕,对于用户来说如果不支持分屏操控的话那就太浪费了。作为安卓阵营第一款可以量产、技术成熟的全面屏手机,vivo X20采用了18:9的超高屏占比2K AMOLED全面屏,加入了Face Wake面部识别技术,采用生物识别的机制,相比较于Face ID来说更加安全。

而且vivo在之前的上海MWC展会上也发布了屏下隐形指纹解锁技术,可以说为全面屏手机的未来打下基础。如果说iPhone X开启了苹果十年的全面屏时代,vivo X20则开启了安卓阵营真正意义上的新全面屏时代。当然vivo X20绝不仅仅只有全面屏一项硬实力,骁龙660带来的多核多线程模式、更加强大的前置柔光双摄、听感更好的Hi-Fi新技术,都将是vivo X20的大杀器。

vivo X20的售价只有iPhone 的一半

显然iPhone高昂的价格并不是适合所有人购买,而价位只有其一半的vivo X20或许就是个不错的选择:更接近潮流的全面屏设计、更加轻薄小巧的机身、独立音频芯片、比iPhone更好的人像拍摄、人脸识别技术加成、更佳的系统易用性、更快的充电速度,同时稳定持续的性能输出也足够使用。

选择二:更快、还能更懂你的它

推荐机型:荣耀V10售价:2699元

荣耀V10京东购买地址:https://item.jd.com/5853593.html

对于厂商来说,全面屏其实是把竞争又拉回了同一起点,加重了同质化竞争,加重了整个产业负担。恰逢此时,AI手机的到来让我们看了希望,听说最近搭载人工智能手机荣耀V10都火到国外去了,不仅登上了高大上的纽约时代广场,还受到了国外多家媒体的组团打Call,笔者身边已经有不少朋友都买了荣耀V10,因为这款手机真的是名副其实地好。

荣耀V10是一款搭载人工智能的手机

荣耀V10搭载麒麟970芯片加上EMUI8.0系统的软硬双AI组合,可以为用户提供让手机“更懂你”的革新体验。和以往的海思处理器不同的是,麒麟970内置了华为与中科院共同研发的内置神经网络处理单元(NPU),在能效和性能优化上,麒麟970和上一代相比有着较大的提升,这意味着在更少的时间和能耗下,这款手机可以完成更多的AI计算任务。所以在这块人工智能时代5星推荐处理器加持下,我们能看到很多具有AI性能的功能。比如说人脸识别、语音助手、AI拍照、AI翻译,AI游戏,有了荣耀V10,智慧生活一秒开启。

荣耀V10的售价也才不超过3000元

如此看来,荣耀V10配置强悍,AI体验好、性能快,堪称完美。不到3000元的荣耀V10和近万元的iPhone X,你一定知道选谁更值得。

选择三:买信仰还是性价比?

推荐机型:华为P10 售价:3488元

HUAWEI P10京东购买地址:https://item.jd.com/4483094.html

之前有个朋友问我iPhone 7和华为P10买哪款好?这两款手机均是发布了有一段时间的机型,并且从发布开始关注度上两款手机均没有下降的趋势,一直处于激烈竞争的状态。不过苹果与华为在今年先后发布新旗舰iPhone8和华为Mate10之后,作为老旗舰的华为P10和iPhone7自然逃不了降价的命运,于是竞争再次达到巅峰。

华为P10依然是中高端最值得买的一款旗舰手机

华为P10手机自身的确一点不弱,随便拿出一个功能出来都是鲜有对手的。搭手机本身搭载的EMUI5.1更是被赞为最好用的安卓体系之一。唯有小米的MIUI系统勉强能与其比尖。手机的外观上时尚大气的手感,颜值极高,相当吸引眼球,加上徕卡双摄产出的人像。静物照片,更是超卓万分,在去年8月份华为P10不负众望更是拿下了销量榜首冠军。

华为P10官方售价已经降至3488元,性价比非常高

华为P10如今价格上官方直降400,第三平台更是直降700元,忽略此前“华为P10事件”的影响,这款手机的性价比是非常之高的,相比iPhone7则更有优势。iPhone7在价格上虽也有调整但仍是四千多元的高价格,这一次,华为P10更胜一筹。

选择四:性能顶级、好评不断

推荐机型:一加5T 售价:2999元

一加5T京东购买地址:https://item.jd.com/5716985.html

在购买手机时,消费者考虑的因素有很多。在我们的特色栏目《数说新机》中也做了一个调查,从调查的数据来看,更多的消费者都看重大内存、大电池、使用体验、颜值以及快充,还有的消费者看重全面屏设计、手感、双摄、2K屏幕这些,而面部识别功能相对来说热度就低一些了。当下安卓手机中内存最大的为8GB,配备8GB内存的手机也不是太多,其中一加手机5T就是一款既有大内存,又有大电池,并且使用体验也非常出色的产品。

一加5T

从用户吸引力来看,“不将就”的强悍配置已经成为一加5T的标签和名片,高通骁龙835移动平台、全面屏、6GB/8GB大内存以大优势位居用户吸引力前三。

除了生猛的参数配置,一加5T海外版预装基于Android 7.1.1的氧OS 4.7.0系统,其指纹识别解锁速度仅需0.2s,此外,该机还支持面部识别,不过调查数据显示,面部识别目前在一加5T的产品吸引力方面还不算强。

一加5T是一加旗下当下的主打产品,这款手机无论是设计还是配置均处于Android顶端之列。但一加5T的售价并没有上涨,6+64GB版售价2999元,8+128GB版售价3499元,熔岩红8+128GB同样是3499元。

一加5T 在京东上好评不断

在2017年11月末上市的一加5T在用户圈中的口碑一直居高不下,值得注意的是:去年的12月份一加5T在京东商城的好评率就一直保持100%,随着评论基数的增加,到目前为止一加5T的京东好评率仍然保持在100%,评价基数已高达近10万条,并且随着产能的爬坡,一加5T星辰黑全版本已经实现了开放购买,销量与日俱增,心动的小伙伴可以准备行动起来了。

写在最后:

上述盘点的旗舰手机,在硬件配置、系统体验、软件优化以及续航上都有着优良的表现,在iPhone X面前不落下风,拿出手也不丢面子。此外这些手机拥有着与苹果迥然不同的特色,vivo X20、一加5T、荣耀V10这些都是当下的主流产品,价格也都在3000元以内,适合追求性能的消费者购买;华为P10是当下的旗舰级手,该机的起售价为3488元,适合预算较多的消费者购买。

最后,还是要回到文章最开头大家最关心的问题,买iPhone X还是安卓手机。我的观点是,如果你真的对iOS系统热衷,并且对全面屏或者装逼没什么执念的话,现在8或者8Plus是个不错的选择。因为随着X的上市,这两款产品在京东等第三方渠道的售价已经跌破了发行价。更便宜的价格可以买到功能差不多的iPhone。

如果你现在使用的是7或者7Plus,并且对全面屏幕没什么执念的话,那么并不推荐你换手机了,有点浪费。

如果你对苹果没有那么的热衷,又没有太多的预算,那么不用逞强去买苹果。因为除了苹果,安卓阵营的旗舰也是非常出色。随着近几年安卓阵营的飞速发展,媲美iOS流畅度的安卓机也逐渐出现。同时相对于颜值单一的iPhone来说也有更多选择,而且它们的售价可能还不及iPhone X的一半。与其死磕苹果情怀,不如来一款安卓旗舰。

人学习手机 App 开发,一开始总要选择一条学习路径。

如果你熟悉 Java 语言,可以学习安卓开发;如果熟悉脚本语言(比如 Python 或 Ruby),可以学习 Swift 语言,进行 iOS 开发;如果像我一样,比较熟悉 Web 网页技术,那么 H5 开发是最容易上手的。

这个系列教程的第一篇,已经介绍过了手机 App 的种类[1]。所谓的 H5 页面,其实就是混合 App 的前端,外面是一个原生的壳,里面是 Web 网页。本文紧接上一篇,介绍手机 App 开发的技术栈,尤其是跟 H5 开发相关的技术。

本文由国内最大的在线教育平台之一“腾讯课堂”[2]赞助。他们现在启动了“腾讯课堂101计划”[3],推广优质课程资源。希望学习和提高手机 App 开发技术的朋友,可以留意一下本文结尾的安卓课程信息。


一、手机 App 的技术栈

手机 App 的技术栈可以分成三类。

(1)原生 App 技术栈(native technology stack)

原生技术栈指的是,只能用于特定手机平台的开发技术。比如,安卓平台的 Java 技术栈,iOS 平台的 Object-C 技术栈或 Swift 技术栈。

这种技术栈只能用在一个平台,不能跨平台。

(2)混合 App 技术栈(hybrid technology stack)

混合技术栈指的是开发混合 App 的技术,也就是把 Web 网页放到特定的容器中,然后再打包成各个平台的原生 App。所以,混合技术栈其实是 Web 技术栈 + 容器技术栈,典型代表是 PhoneGap、Cordova、Ionic 等框架。

如果已经掌握了 Web 技术,这个技术栈就主要学习容器提供的 API Bridge,网页通过它们去调用底层硬件的 API。

(3)跨平台 App 技术栈(cross-platform technology stack)

跨平台技术栈指的是使用一种技术,同时支持多个手机平台。它与混合技术栈的区别是,不使用 Web 技术,即它的页面不是 HTML5 页面,而是使用自己的语法写的 UI 层,然后编译成各平台的原生 App。

这个技术栈就是纯粹的容器技术栈,React Native、Xamarin、Flutter 都属于这一类。学习时,除了学习容器的 API Bridge,还要学习容器提供的 UI 层,即怎么写页面。

(4)小结

H5 开发主要用在混合技术栈。但是,跨平台技术栈的某些容器也会用到(比如 React Native),因为它们的 UI 层借鉴了 Web 模型。

另外,混合技术栈和跨平台技术栈的基础,都是原生技术栈,因为最终都要编译成原生App。所以,不管使用哪一种技术栈,多多少少要了解一些各平台的原生技术。

下面就依次介绍上面三类技术栈,每个技术栈都会给出一个最简单的例子:加载网页。通过各种技术栈加载网页的不同做法,帮助大家理解它们的特点,对 App 的技术实现有一个总体的认识。

二、WebView 控件

讲解具体的技术栈之前,大家需要知道,不管什么技术,最终在 App 里面显示网页,一定需要一个网页引擎,这样才能解析网页。

通常情况下,App 内部会使用 WebView 控件作为网页引擎。这是系统自带的控件,专门用来显示网页。应用程序的界面,只要放上 WebView,就好像内嵌了浏览器窗口,可以显示网页。

不同的 App 技术栈要显示网页,区别仅仅在于怎么处理 WebView 这个原生控件。

•原生技术栈:需要开发者自己把 WebView 控件放到页面上。•混合技术栈:页面本身就是网页,默认在 WebView 中显示。•跨平台技术栈:提供一个 WebView 的语法,编译的时候将其换成原生的 WebView。

注意,不同系统的 WebView 控件名称不一样,安卓系统就叫 WebView,iOS 系统有较老的 UIWebView,也有较新的 WKWebView,作用都是一样的,差异在于功能的强弱。

三、原生技术栈

原生技术栈分成 iOS 和安卓两个平台。

简单说,iOS 的原生技术栈就是使用 Object-C 语言或 Swift 语言,在 Xcode 开发环境中编程。安卓的原生技术栈,则是使用 Java 语言或 Kotlin 语言,开发环境是 Android Studio。

下面就来看看,它们怎么加载网页。

3.1 Xcode

iOS 开发需要安装 Xcode。它是一种集成开发环境(IDE),也是苹果公司指定的 iOS 官方开发工具,所有苹果手机的 App 都由它打包生成。

它可以在 Mac 电脑上通过应用商店免费安装。注意,Xcode 只支持 Mac 系统,不支持其他系统。

安装完成后,打开新建一个项目,类型是单视图 App,然后系统会询问一些项目参数和储存位置,这里就不详细说明了。

然后,就进入了开发环境。

左侧的目录树里面,找到ViewController.swifter文件,它负责视图逻辑。按照官方文档[4],填入下面的代码。

上面代码的意思是,启动 App 加载视图的时候(loadView()),新建一个 WebView 控件的实例。视图加载成功后(viewDidLoad()),WebView 再去加载外部网页(红框部分)。

然后,就可以查看代码运行结果。点击工具栏的运行按钮,Xcode 就会弹出一个 iPhone 模拟器,里面就是当前代码的运行结果。

如果一切正常,就可以让 Xcode 对源码打包,生成 App 的二进制安装文件。

3.2 Android Studio

安卓的官方开发工具是 Android Studio,可以去官网[5]下载。

安装完成后,打开新建一个项目,类型是“Empty Activity”。

Android Studio 会询问项目参数,包括项目名称、开发语言(Java)等,然后就进入了开发环境。因为它是基于 Java IDE 修改的,懂 Java 的朋友应该对这个界面比较熟悉。

按照网上的这篇教程[6],接下来需要修改三个文件,其中最主要的是把MainActivity.java文件改成下面这样。

上面红框处的代码,就是在页面上添加并设置 WebView 实例,指定生成视图的时候(onCreate()),WebView 实例去加载外部网页。

运行代码之前,Android Studio 要求必须连接真机,或安装安卓模拟器。完成以后后,在工具栏上点击运行按钮,就可以运行代码查看效果了。

如果一切正常,就可以让 Android Studio 打包,生成 App 的二进制安装文件。

四、混合技术栈

上面的原生技术栈需要自己新建 WebView 实例,相比之下,混合技术栈就简单多了。因为页面就是网页,所以容器已经设置好了 WebView,开发者直接写页面即可。

4.1 框架种类

混合技术栈的各种容器框架之中,历史最悠久是 PhoneGap[7],诞生于2009年。后来在2011年被 Adobe 公司收购,改名为 Adobe PhoneGap。

Adobe 公司将 PhoneGap 的核心代码,后来都捐给了 Apache 基金会,作为一个全新的开源项目,名为 Apache Cordova[8]

PhoneGap 和 Cordova 现在是两个独立发展的开源项目,但是彼此有密切的关系,可以简单理解成 Cordova 是 PhoneGap 的内核,PhoneGap 是 Cordova 的发行版。

后来,其他人也开始基于 Cordova 封装自己的框架,所以市场上有许多基于 Cordova 的开源框架,比较著名的有 Ionic[9]、Monaca[10]、Framework7[11]等。

所有这些框架的共同点,都是使用 Web 技术(HTML5 + CSS + JavaScript)开发页面,再由框架分别打包成 iOS 和安卓的 App 安装包。它们的优点是开发简单、周期短、成本低,缺点是功能和性能都很有限。

4.2 Ionic 实例

基于 Cordova 的框架,用法都大同小异,下面就以 Ionic 为例,演示如何加载外部网页。

首先,根据官方文档[12],生成项目的脚手架。

$ npm install -g ionic@latest$ ionic start myApp blank --type=react$ cd myApp

接着打开src/pages/Home.tsx文件,插入<iframe>标签即可。

上面代码中,由于页面本身就是网页,所以可以直接用<iframe>标签插入外部网页。

然后,在本机起一个 Web 服务,看看 Demo 的效果。

$ ionic serve

上面命令会自动打开浏览器窗口,访问本机的8100端口,在浏览器中显示网页效果。

如果一切正常,在命令行窗口按 Ctrl+c,退出服务。编译成 App 安装包的方法可以参考官方文档[13]

五、跨平台技术栈

上面的混合技术栈使用 HTML 语言编写页面,再用 WebView 控件加载页面,所以只写一次页面,就能支持多个平台。跨平台技术栈也能做到多平台支持,但是原理完全不同。

跨平台技术栈的框架,都是使用自己的语法编写页面,不使用 Web 技术,编译的时候再将其转为原生控件,或者使用自己的底层控件,生成原生 App。这样就完全解决了 Web 页面性能不佳的问题。下面介绍三个这样的框架。

•React Native: 使用 JavaScipt 语言编写页面•Xamarin:使用 C# 语言编写页面•Flutter:使用 Dart 语言编写页面

5.1 React Native

(1)原理

2013年, Facebook 公司发布了 React 框架。这个框架是为网页开发设计的,核心思想是在网页之上,建立一个 UI 的抽象层,所有数据操作都在这个抽象层完成(即在内存里面完成),然后再渲染成网页的 DOM 结构,这样就提升了性能。

很快,工程师们就意识到了,UI 抽象层本质上是一种数据结构,与底层设备无关,不仅可以渲染成网页,也可以渲染成手机的原生页面。这样的话,只要写一次 React 页面,就能分别编译成 iOS 和安卓的原生 App。这就是 React Native 项目的由来。

注意,React Native 虽然也使用 JavaScript 语言,并且写法看上去像 Web 页面,但其实所有控件都是自己定义的,编译时再一一翻译为对应的原生控件。举例来说,React Native 的文本渲染控件是<Text>,翻译成 iOS 控件为UIView,翻译成安卓控件为TextView。这种做即保证了性能,又做到了跨平台支持,所以一诞生就引起开发者的关注,成了热门技术。

还有一个 NativeScript[14]框架,跟 React Native 很像,也是使用 JavaScript 语言,然后编译成原生控件。不过,它的开发模型是基于 Angular.js,而不是 React。

(2)实例

下面就是 React Native 加载外部网页的实例。为了方便使用,官方团队提供了一个封装好的工具集,叫做 Expo[15]。第一步,在手机安装 Expo 的 App 客户端(App Store[16],Google Play[17])。

然后,在命令行安装脚手架工具expo-cli,新建一个示意项目。

$ npm install -g expo-cli$ expo init rnDemo

新建项目时,会要求你选择项目模板,可以选minimum模板。然后,还会要求你填写项目描述displayName,这个可以随便写。

然后,安装 React Native 自己的 WebView 控件。

$ cd rnDemo$ npm install --save react-native-webview

接着,打开主页面的脚本文件App.js,将其改成下面的代码。

上面代码中,React Native 自身的WebView控件,编译时会分别转为 iOS 和安卓的原生 WebView 控件。

接下来,预览页面效果。可以先把它编译成 Web 版,在浏览器预览,这样比较快,立刻就能看到效果。

$ npm run web

运行上面的命令,命令行会出现一个二维码。

这时可以打开手机端的 Expo 客户端,扫描这个二维码,就会显示 App 的页面。注意,计算机和手机必须在同一个局域网。

(3)React Native 的问题

React Native 的想法虽然很美好,但是实际开发中出现了各种各样的问题。

最主要的一个问题是, UI 抽象层翻译出来的 iOS 和安卓原生页面,做不到完全一致,尤其是复杂页面,样式或功能存在差异。编译出来两个平台的原生 App 往往是一个正常,另一个会出现各种奇怪的小毛病。React Native 的底层还是没有做到无缝适配,它至今没有发布 1.0 版(2019年底是 0.61 版),这多多少少也说明了一些问题。

如果你想用 React Native 做到 iOS 和安卓体验一致,并且充分发挥原生控件的功能,就需要同时熟悉 React Native、iOS、安卓三个平台,这对开发者的要求实在太高了。Airbnb 公司在使用 React Native 两年后,宣布放弃,改用原生技术栈。他们写了一篇很长的文章[18],解释为什么这么做,React Native 到底有什么问题,大家可以参考那篇文章。

5.2 Xamarin

Xamarin 是微软公司的跨平台 App 开发框架,原理跟 React Native 很相似,只不过它的语言是 C#。

它的使用需要 Visual Studio,这里就不举例了。根据官方文档[19],WebView 的用法如下。

上面代码中,首先新建了一个 WebView 控件的实例,然后把这个实例放到布局上,跟原生 App 的语法很像。

5.3 Flutter

Flutter[20]是谷歌公司最新的跨平台开发框架。它为了解决 React Native 的平台差异问题,采用了一个完全不同的方案。

它自己实现了一套控件。打包的时候,会把这套控件打包进每一个 App,因此不存在调用原生控件的问题。不管什么平台,都调用内嵌的自己那套控件,就能做到 iOS 和安卓体验完全一致。

Flutter 历史还不长,应用还不广泛,API 也没稳定下来。但是很值得关注

加载外部网页的实例,可以参考 Flutter 官方团队的这篇文章[21]。核心代码如下:

上面代码使用的是 Dart 语言。它是 Flutter 的官方语言,接近 JavaScript 语法,但是多了静态类型支持。

六、总结

通过上面的介绍,希望大家已经了解了各种技术栈的特点。

(1)原生技术栈的技能和体验最好,对于复杂的大型 App,如果条件允许,应该采用这种方式开发。

(2)混合技术栈的成本低,灵活性好,对性能要求不高的简单 App,尤其是纯展示性的页面,可以采用这种方式开发。

(3)跨平台技术栈适用于,存在外部或内部条件的限制,只有一个团队开发跨平台 App 的情况。

(正文完)

安卓开发高级 UI 课程

手机 App 的 UI(用户界面),往往是 App 成功的关键因素:产品的外观是否漂亮,点击和滑动是否流畅,意图是否清晰,都会影响到用户的留存率。一个好的 UI 不仅体现了产品经理和开发者的素质,还可以有效降低拉新成本。

一般的开发者接到产品的 UI 设计方案之后,可能就会去网上找类似的效果,看看有没有开源代码。但是,优秀的开发者会努力思考,如何通过完全自定义来实现这个效果,做到功能和性能的最佳状态。

这就要求开发者具有实现高级 UI 的开发能力,理解安卓 UI 的底层实现原理,比如自定义 View 的渲染流程(onMeasure->onLayout->onDraw),以及交互设计(touch事件)。

怎样才能高效地学习安卓高级 UI 开发,早日进阶成为高级安卓工程师呢?这里介绍享学课堂的一门课程 《高级安卓 UI ——自定义 ViewGroup 与 UI 性能优化》,它带大家一行一行代码去实现一个京东自定义ViewGroup,研究系统的FrameLayoutViewPager的源码,最后通过阅读源码,分析ViewPager设计过程中的显示问题和性能问题。下图是课程介绍(点击看大图)。

这个课程是直播课程,在线实时答疑,特别邀请了 Alvin 老师(前三星/小米高级研发经理)主讲,只需要0.1元就能参与。听课之后觉得满意,还可以学习其他 Android 高级进阶的实战课程。

(完)

References

[1]手机 App 的种类:http://www.ruanyifeng.com/blog/2019/12/hybrid-app-concepts.html

[2]“腾讯课堂”:https://ke.qq.com/

[3]“腾讯课堂101计划”:https://edu.qq.com/a/20190119/005414.htm

[4]官方文档:https://developer.apple.com/documentation/webkit/wkwebview

[5]官网:https://developer.android.com/studio

[6]这篇教程:https://codingislove.com/android-web-view/

[7]PhoneGap:https://phonegap.com/

[8]Apache Cordova:https://cordova.apache.org/

[9]Ionic:https://ionicframework.com/

[10]Monaca:https://monaca.io/

[11]Framework7:https://framework7.io/

[12]官方文档:https://ionicframework.com/docs/react/your-first-app

[13]官方文档:https://ionicframework.com/docs/react/your-first-app#build-a-native-app

[14]NativeScript:https://www.nativescript.org/

[15]Expo:https://expo.io/

[16]App Store:https://itunes.apple.com/app/apple-store/id982107779

[17]Google Play:https://play.google.com/store/apps/details?id=host.exp.exponent

[18]很长的文章:https://medium.com/airbnb-engineering/sunsetting-react-native-1868ba28e30a

[19]官方文档:https://docs.microsoft.com/en-us/dotnet/api/xamarin.forms.webview?view=xamarin-forms

[20]Flutter:https://flutter.dev/

[21]这篇文章:https://medium.com/flutter/the-power-of-webviews-in-flutter-a56234b57df2

常在一些原型设计QQ讨论群里,有人咨询如何让移动端原型刚好能显示在手机屏幕上,更进一步的效果是在不同分辨率上都能正常显示,今天我们就来聊聊如何适配不同手机分辨率的问题。

一、移动端简单原型设计

先来设计一个简单的移动端的原型,上边一个标题栏,中间同内容,底端是一个菜单栏。

样式设置如下:

(1)标题栏:添加一个矩形框,命名title,大小为400*40,蓝底白字,文字左对齐,左边距10。

(2)搜索框:添加一个矩形框模拟输入框,大小为360*40,灰色边框,灰色文字,文字左对齐,文字内容为“请输入搜索内容”。

(3)几个图标:在输入框下方添加5个占位符来表示,注意将左右两个占位符分别和上方的矩形框对齐。

(4)菜单栏:在稍微下方的位置添加个矩形框,命名为menu,表示菜单栏,大小和标题栏一致,背景为浅灰色。

准备工作做好了,我们希望的效果是在手机上显示时,标题栏宽度正好和手机浏览器宽度一样,输入框和几个占位符在水平方向上处于屏幕中间位置,菜单栏在屏幕的底端。

二、移动端原型预览

好了,现在我们不做任何处理的情况下,预览一下效果。

为了在预览时不要出现左侧的工具栏影响查看,我们在按下F8键将原型导出html时注意选择“不加载工具栏”:

然后将导出的原型通过手机数据线传到手机上SD卡的某个位置(为方便,我们以Android手机为例),在手机上访问页面index.html,访问的效果如下:

我们发现除了手机屏幕比较小外,显示的效果和在电脑浏览器上的效果一样,并没有适配在手机上,也就是说,原型根本就没有识别到当前是在手机浏览器上显示。

三、修改发布参数

我们需要修改一下发布时的参数,让导出的页面能自动识别出是在手机上访问。

按下F8键,选择“移动设备”,只需要勾选“包含视口标签”,单击“生成”按钮:

重新导出原型页面,将导出的页面重新上传到手机SD卡上,再通过手机浏览器来访问,效果如下:

这时我们发现效果图已经基本差不多在手机上正常显示了。

但是,还是有点问题!

  1. 标题栏和菜单栏宽度并没有和屏幕宽度一致,右边有空出一部分
  2. 内容部分也没有在屏幕上水平居中显示
  3. 菜单栏没有在屏幕的底端

怎么办呢?

办法是有的,这就是我们下一步要解决的问题。

四、手机屏幕分辨率适配思路

现在的问题有上面提到的三点,那么就针对这三点来处理。

(1)标题栏和菜单栏宽度并没有和屏幕宽度一致的问题

思路:我们并不知道每个手机的屏幕大小是多少,但是Axure里有函数可以获得浏览器窗口的宽度,因此只要在原型页面加载完成时,设置一下标题栏和菜单栏的宽度和窗口宽度大小一样不就行了吗?

选择当前页面,双击“页面载入时”添加事件处理:

这样在页面加载完成时,就会设置标题栏和菜单栏和屏幕宽度一致了,注意同时勾选title和menu,宽度都设置为“[[Window.width]]”。

(2)内容部分也没有在屏幕上水平居中显示

思路:我们将内容部分当作一个整体,在页面加载完成后,将内容移动到屏幕水平中面位置。

选择除标题栏和菜单栏外的内容部分,右键转换为动态面板,命名为main:

编辑前面的页面加载事件,移动动态面板main的绝对位置到屏幕水平中央位置,y位置不变,计算公式=(窗口宽度-动态面板宽度)/2,最终的表达式为“[[(Window.width-LVAR1.width)/2]]”,注意这里使用到局部变量表示动态面板:

(3)菜单栏没有在屏幕的底端

我们能取到窗口的高度,因此我们计算出菜单栏在屏幕上的位置。 具体位置=屏幕的高度-菜单栏的高度,最终表达式为“[[Window.height-LVAR1.height]]”,将菜单栏移动到这个位置即可,注意这里同样使用到了局部变量表示菜单栏:

五、最终预览效果

将原型重新导出,上传到手机上,使用手机浏览器查看,最终的效果如下:

可以看到原型已经适配了手机屏幕的大小,达到我们所需要的效果,即使你在换了不同的手机后,也同样会正常显示。

本文由 @Axure 原型设计工场 原创发布于人人都是产品经理。未经许可,禁止转载。