UWP开发入门(六)——对多设备不同分辨率显示效果的讨论

原文:UWP开发入门(六)——对多设备不同分辨率显示效果的讨论

  本篇不涉及具体代码,而是把实际开发UWP APP的过程中,遇到的不同设备,不同分辨率显示效果差异的问题进行讨论。希望能够抛砖引玉,和各位擦出一些火花。

  蜀黍我目前是在做一套牛逼的UWP APP啦,目标是能跑在各种尺寸不同,分辨率不同的PC,Phone和Tablet上。无论是从代码的复杂度还是实现的难度来说,都只希望维护一套代码。

  在项目的初始阶段,美工MM对Tablet和Phone各设计了一套界面,在对UWP的Adaptive UI做了一些调研后,认为只要保持界面元素大致相同,以Phone为基准,在Tablet上做一个拉伸就可以了。

  然而在实际开发过程中仍然发现了一些问题。话说美工MM的Phone按照640 x 480的分辨率设计,Tablet按照Surface Pro 3的2160 x 1440来设计。

  

  Tablet的话如上图,SplitView布局,最左边是Pane,然后中间再分两块内容区域。Phone的界面会藏起Pane,然后两块内容区域不再并排显示。很常见的UI设计,你们都懂的啦。

  首先这两个屏幕的纵横比是不一样的,同时整体布局也有很大差异。从Phone到Tablet布局的整体切换呢,可以通过UWP新增的AdaptiveTrigger根据屏幕Width和Height来触发更新布局的操作,问题不大。

  但是具体到设置元素大小时就遇到困难了。一开始美工MM贴心的给了两套Style……这在两套Style切来切去代码烦死人不说,这个用户体验也不好,窗口拖到一半东西突然Biu~的一声变大了,怪吓人的……

  那么我们就要确定一套Style为基准,同样的fontSize,同样的元素尺寸。结果问题出现了,以Tablet 2160 x 1440的设计稿为基准做出来的程序,在1080p的PC和480p的手机上都显得硕大无比,所有元素都给打了激素一样。

  紧急叫停之后,我们告诉美工MM用1080p的分辨率来做Tablet。然后就发现Tablet看上去正常了,但480p的Phone上仍然惨不忍睹硕大无比。同样的100px的长度,在Tablet和Phone上竟然不一致。使用Live Tree Explorer测量屏幕的大小发现,Phone的元素尺寸会有一个对应的缩放比例:


分辨率


屏幕尺寸


实际长度


比列


640 x   480


4


533.33   x 320


1.5 : 1


1280 x   720


5


640 x   360


2: 1


1920 x   1080


6


768 x   431


2.5 : 1

 

  也就是480p的Phone实际Width只有320px。我们以480px的Width设计出来的界面,实际比1080p的Lumia 1520真实Width 431px还要大。

  但是这个缩放比列却又对文字无效,无效……无效……,fontSize写了多大,在各种屏幕上都是一个尺寸。当时蜀黍感觉蛋都要碎了。2015年12月31日啊,蜀黍破天荒的加班了啊,因为第二年要给其他兄弟还有美工MM一个交代啊!

  苦思冥想啊,白头发都多了好几根……最终还是决定把问题简单粗暴化,采用640 x 460来设计Phone,即以720p的Phone为基准。之所以舍弃480p是考虑lumia 530之类的老旧设备即将淘汰,Win10m最低端的Lumia 550也是720p了。

  然后保持Phone 720p设计稿上的元素和字体大小不变,平移到1080p的Tablet画布上再次进行布局。基本就等于将两份640 x 360大小的手机屏幕左右放置到1920 x 1080的Tablet上。再做一些间距的调整,实际效果经多方研究表示可以接受。

  如果用户使用了480p的低端Phone和1366 x 768的古董PC,那看上去的元素大小会稍稍放大。好在720p相对480p的跨度较小,理论上字符串和图片被截断的可能性不大。

  当用户使用了1080p以上的Phone和Surface Pro 4这样的Tablet,元素会显得更为细小精致,但针对触摸优化的UI绝对比视网膜屏MacBook上针对键鼠的软件来的要大。每次看公司同事的MacBook屏幕感觉我眼睛都要瞎了……(顺便黑一下,他们经常去修Mac……质量么……)

  那么本篇就到这里,虽然写得简单了点,但你真要写跨设备多分辨的UWP APP,嘿嘿还是从头再好好看一遍吧……

  另外打个广告,后面打算延续本篇的讨论,针对具体页面或控件给出实例分析,到时候要来点赞哦。当然我也可能挖坑不填……谢谢

时间: 2024-11-03 17:43:26

UWP开发入门(六)——对多设备不同分辨率显示效果的讨论的相关文章

UWP开发入门(十六)——常见的内存泄漏的原因

原文:UWP开发入门(十六)--常见的内存泄漏的原因 本篇借鉴了同事翔哥的劳动成果,在巨人的肩膀上把稿子又念了一遍. 内存泄漏的概念我这里就不说了,之前<UWP开发入门(十三)--用Diagnostic Tool检查内存泄漏>中提到过,即使有垃圾回收机制,写C#还是有可能发生内存泄漏. 一般来说,以下两种情况会导致内存泄漏: 对象用完了但是没有释放资源 对象本身是做了清理内存的操作,但是对象内部的子对象没有成功释放资源 下面就UWP开发中具体的实例来说明需要避免的写法 从static/glob

UWP开发入门(十二)——神器Live Visual Tree

原文:UWP开发入门(十二)--神器Live Visual Tree 很久以前,我们就有Snoop这样的工具实时修改.查看正在运行的WPF程序,那时候调个样式,修改个模板,相当滋润.随着历史的车轮陷进WP的泥潭中,无论WP7的Silverlight还是WP8.1的runtime,偶们都不能方便快捷的查看APP的可视化树(Visual Tree)了,呜呼哉,是可忍孰不可忍放下筷子就骂微软.没想到Visual Studio 2015倒是给了我们一个惊喜,自带了一套非常强大的调试工具Live Visu

UWP开发入门(十七)——判断设备类型及响应VirtualKey

原文:UWP开发入门(十七)--判断设备类型及响应VirtualKey 蜀黍我做的工作跟IM软件有关,UWP同时会跑在电脑和手机上.电脑和手机的使用习惯不尽一致,通常我倾向于根据窗口尺寸来进行布局的变化,但是特定的操作习惯是依赖于设备类型,而不是屏幕尺寸的,比如聊天窗口的发送消息.假设如下场景,desktop运行时要求回车键直接发送消息,而mobile版则要求回车键换行,仅能通过点击按钮发送消息. 第一段的铺垫是为了今天提到的两个主题,判断设备类型和处理Shift+Enter的组合. 首先判断设

UWP开发入门(七)——下拉刷新

原文:UWP开发入门(七)--下拉刷新 本篇意在给这几天Win10 Mobile负面新闻不断的某软洗地,想要证明实现一个简单的下拉刷新并不困难.UWP开发更大的困难在于懒惰,缺乏学习的意愿.而不是"某软连下拉刷新控件都没有"这样的想法. 之前我也没有进行过下拉刷新的研究.于是先去google了几篇blog学习了一下,然后再看了某软官方的Sample.(同学们啊官方有下拉刷新的Sample啊!就在Git上啊!不要钱无门槛啊!)学习之后发现实现的方式大体分为两类. 一类是以某软Sample

UWP开发入门(八)——聊天窗口和ItemTemplateSelector

原文:UWP开发入门(八)--聊天窗口和ItemTemplateSelector 我们平常用的最多的APP可能就是企鹅和微信了.有没有想过聊天窗口如何实现的?本篇我们将简单模拟一个聊天窗口. 聊天窗口大致上就是消息的一个集合列表.集合列表最常见的展现形式无非就是ListView.可能有些童鞋会觉得ListView的样式和聊天窗口相去甚远,虽然我们可以通过自定义ItemTemplate来修改元素的显示效果,但如何将ListView的元素以不同样式展现呢?这就要通过ListView的ItemTemp

UWP开发入门(十四)—— UserControl中Adaptive UI的小技巧

原文:UWP开发入门(十四)-- UserControl中Adaptive UI的小技巧 本篇我们通过绘制一个非常简单的UserControl控件,来分享一下对Adaptive UI的理解及一些图形绘制的技巧. 现在流行的APP都少不了精致的用户头像,首先假设我们需要绘制如下的图形作为默认头像: <UserControl x:Class="AdaptiveUserControl.Circle0" xmlns="http://schemas.microsoft.com/w

UWP开发入门(十九)——10分钟学会在VS2015中使用Git

原文:UWP开发入门(十九)--10分钟学会在VS2015中使用Git 写程序必然需要版本控制,哪怕是个人项目也是必须的.我们在开发UWP APP的时候,VS2015默认提供了对微软TFS和Git的支持.考虑到现在Git很火,作为微软系的程序员也不得不学一点防身,以免被开源世界的家伙们嘲笑.蜀黍我Git也是菜鸟一只(还请老司机多多指点),只会用VS2015和SourceTree这样的GUI工具点一点按钮,但是我相信用惯了SVN和TFS的童鞋们,需要一点勇气去学习一些新东西,特别是Git已经形成潮

AppleWatch开发入门六——Glance(预览)扩展的应用

AppleWatch开发入门六--Glance(预览)扩展的应用 一.简介         Glance是watchOS中类似iOS的today插件一样的预览扩展.提供了Glance功能的WatchApp可以在手表主页上唤起Glance,展示app相关信息,然而这个扩展只能作为展示作用,并不能进行太多的交互,界面的布局也有很大的限制,因此,Glance的应用主要在于展示备忘信息等.特点如下: 1.扩展的样式布局我们并不能完全个性化,只能通过系统模板来布局. 2.扩展中不能添加交互功能,只能展示信

UWP开发入门(四)——自定义CommandBar

原文:UWP开发入门(四)--自定义CommandBar 各位好,再次回到UWP开发入门系列,刚回归可能有些不适应,所以今天我们讲个简单的,自定义CommandBar,说通俗点就是自定义类似AppBarButton的东西,然后扔到CommandBar中使用. 话说为了在公司次世代平台级战略层产品上实现与水果和机器人一致的用户体验,美工把Win10 APP的AppBar也画成左右分开的了,好看是好看了,问题原生的ComandBar控件不支持这么排列啊--头疼归头疼,只能再次展开山寨之路-- 初步思