[UWP]涨姿势UWP源码——适配电脑和手机
上一篇我们介绍了绘制主界面的MainPage.xaml,本篇则会结合MainPage.xaml.cs来讲一讲如何适配电脑和手机这些不同尺寸的设备。
同时适配电脑和手机存在几个麻烦的地方:
- 屏幕尺寸差距过大,不太适合以手机为基准,然后在电脑上等比放大。
- 手机屏幕小,但是分辨率高。比如Lumia 950的2K屏就默认采用400%的比例来显示。
- 手机一般默认竖屏。电脑会有16:9,3:2各种比例,且默认横屏。导致整体布局需要调整。
其他细节讨论可以看我之前写的一些心得:
http://www.cnblogs.com/manupstairs/p/5143414.html
在涨姿势UWP中,通过Page对象的SizeChanged事件来控制界面尺寸变化。有童鞋可能要问,既然都是以屏幕Width为依据变化,为什么不在XAML中使用AdaptiveTrigger 的MinWindowWidth属性。
- <VisualStateManager.VisualStateGroups>
- <VisualStateGroup>
- <VisualState >
- <VisualState.StateTriggers>
- <AdaptiveTrigger MinWindowWidth="769" />
- </VisualState.StateTriggers>
- <VisualState.Setters>
- <Setter Target="GridRootLayout.HorizontalAlignment" Value="Left"></Setter>
- <Setter Target="GridRootLayout.VerticalAlignment" Value="Top"></Setter>
- <Setter Target="GridRootLayout.Width" Value="320"></Setter>
- <Setter Target="GridRootLayout.Height" Value="640"></Setter>
- </VisualState.Setters>
- </VisualState>
- </VisualStateGroup>
- </VisualStateManager.VisualStateGroups>
上面代码通过AdaptiveTrigger在Width等于769时,将GridRootLayout的HorizontalAlignment,VerticalAlignment,Width和Height四个属性重新赋值,确实是官方Sample给出的用法。我之前也介绍过这种用法:
http://www.cnblogs.com/manupstairs/p/5267418.html
相较而言,SizeChanged的实现显得更为灵活:
- 可以将界面变化赋值的代码封装成一个方法,在多处调用。
- 可以有需要计算的复杂条件判断,而不仅仅是MinWindowWidth这种的值判断。
代码中我提取了一个UpdateLayout方法,在SizeChanged时传递e.NewSize.Width作为参数。以Width为依据,同时判断SelectedItem是否为null,进一步计算页面的布局。另外UpdateLayout方法还会在ViewModel的自定义事件UpdateLayoutEvent被触发时调用。
- private void MainPage_SizeChanged(object sender, SizeChangedEventArgs e)
- {
- UpdateLayout(e.NewSize.Width);
- }
- private void UpdateLayout(double newWidth)
- {
- if (newWidth <= )
- {
- this.splitView.DisplayMode = SplitViewDisplayMode.Overlay;
- this.borderMiddle.Width = ;
- if (listViewItems.SelectedItem == null)
- {
- columnRight.Width = zeroGridLength;
- columnLeft.Width = oneStarGridLength;
- columnRightBar.Width = zeroGridLength;
- columnLeftBar.Width = oneStarGridLength;
- }
- else
- {
- columnLeft.Width = zeroGridLength;
- columnRight.Width = oneStarGridLength;
- columnLeftBar.Width = zeroGridLength;
- columnRightBar.Width = oneStarGridLength;
- }
- }
- else
- {
- columnLeft.Width = fourStarGridLength;
- columnRight.Width = sixStarGridLength;
- columnLeftBar.Width = fourStarGridLength;
- columnRightBar.Width = sixStarGridLength;
- this.splitView.DisplayMode = SplitViewDisplayMode.CompactOverlay;
- this.borderMiddle.Width = ;
- }
- }
在MainPage.xaml.cs中,我们还处理了系统Back按钮的事件,这在手机和平板上会起到作用。
- SystemNavigationManager.GetForCurrentView().BackRequested += (sender, e) =>
- {
- if (vm.SelectedItem != null)
- {
- vm.SelectedItem = null;
- e.Handled = true;
- }
- };
另外需要注意的是,如果要处理手机的状态栏,需要额外的添加引用“Windows Mobile Extensions for the UWP”。
添加之后的引用列表如下图:
特别要注意的是,即使添加了“Windows Mobile Extensions for the UWP”,在访问Mobile特有的API之前,仍需要通过if判断来避免程序崩溃。这里如果不进行if判断,在PC和Tablet上运行时就会闪退。
- if (ApiInformation.IsTypePresent("Windows.UI.ViewManagement.StatusBar"))
- {
- StatusBar.GetForCurrentView().BackgroundColor = Colors.Transparent;
- StatusBar.GetForCurrentView().ForegroundColor = Colors.Black;
- }
本篇主要介绍如何通过SizeChanged来实现自适应布局,谢谢能看到这里的各位!
Windows 10 Create Update 4月11日就要正式推出了,Windows Phone据说又要崛起了……
GitHub源代码地址:
https://github.com/manupstairs/ZhangZiShiRSSRead
Windows Store:
https://www.microsoft.com/zh-cn/store/p/%e6%b6%a8%e5%a7%bf%e5%8a%bfuwp/9nblggh3zqd1
[UWP]涨姿势UWP源码——适配电脑和手机的更多相关文章
- NXP官方的i.mx6ul板级uboot源码适配
1.前言 CoM-P6UL是盈鹏飞科技有限公司基于NXP原厂I.MX6UL芯片生产研发的核心板,本文将对CoM-P6UL适配NXP的基于Linux4.1.15版本的uboot板级源码. 2.开发环境 ...
- [UWP]涨姿势UWP源码——IsolatedStorage
前一篇涨姿势UWP源码分析从数据源着手,解释了RSS feed的获取和解析,本篇则会就数据源的保存和读取进行举例. 和之前的Windows Runtime一样,UWP采用IsolatedStorage ...
- [UWP]涨姿势UWP源码——UI布局
懒癌晚期兼正月里都是过年,一直拖到今天才继续更新.之前的几篇介绍了数据的来源,属于准备工作.本篇我们正式开始构建涨姿势UWP程序的UI界面. 我们这个Hello World程序比较简单,总共只有一个页 ...
- [UWP]涨姿势UWP源码——Unit Test
之前我们讨论了涨姿势UWP的RSS数据源获取,以及作为文件存储到本地,再将数据转化成Model对象.这部分非UI的内容非常适合添加Unit Test.不涉及UI的话,UT写起来简单高效,很是值得投入一 ...
- [UWP]涨姿势UWP源码——RSS feed的获取和解析
本篇开始具体分析涨姿势UWP这个APP的代码,首先从数据的源头着手,即RSS feed的获取和解析,相关的类为RssReader,所有和数据相关的操作均放在里面. 涨姿势网站提供的RSS feed地址 ...
- [UWP]涨姿势UWP源码——极简的RSS阅读器
涨姿势UWP,一个开源的RSS阅读器,一个纯粹的项目,一个有道德的APP,一个脱离了低级趣味的作者,一些有益于人民的代码.骚年,还等什么,来涨点姿势吧! 该项目代码可能会引起部分人群的不适,敏感人群请 ...
- win10 UWP Markdown 含源码
Windows下没有比較好的Markdown编辑器 我就自己写一个 csdn的Markdown非常好,就是我须要截图保存有麻烦 须要把我的截图保存在本地,然后上传 这个过程比較麻烦 csdn的图没法外 ...
- postgres外部表如何修改源码适配pg升级
postgres中外部表的应用如下: 但是许多在github上的fdw开源代码都是基于9.3以及9.4版本开发,原作者没有随着pg的版本升级而将外部表扩展升级,那只能靠自己去手动修改源码来让这些扩展能 ...
- 编译Android 4.4.4 r1的源码刷Nexus 5手机详细教程
本文博客地址:http://blog.csdn.net/qq1084283172/article/details/54562606 网上关于编译Android源码的教程已经很多了,但是讲怎么编译And ...
随机推荐
- 毕向东udp学习笔记1
参看了毕向东老师的视频教程,准备直接用EditPlus记事本来直接敲Java代码,好好学习一下udp部分,GUI部分,线程部分,加油 项目功能: 实现udp简单的发送接收功能. 当使用EditPlus ...
- Linux的CentOS7系统下配置LNMP
友情提示:在执行以下操作之前,请确保您已经安装了centos7,因为以下所有操作均是在centos7下操作完成的. 1.首先要停掉本机自带的防火墙,再配置iptables,开放21/22/80/808 ...
- 随手小记(es6)
在学习前辈阮一峰大神写的<ECMAScript入门>一书的过程中,第九章中讲到对象扩展时,第一条我就有点看不懂 ES6允许直接写入变量和函数,作为对象的属性和方法.这样的书写更加简洁. v ...
- Servlet支持上传多张图片
首先前端的表单是这个形式: <form target="_self" method="post" action="fileUploadMult ...
- react配置之浅谈
//复习 1 .块级作用域 let 和const 2 变量结构 默认值 一般往后写 rest参数(了解) 箭头函数(重要)(x,y)=>{} 3.map 存储高级键值对 4.set集合(去重) ...
- HTML入门
一些说明 写在前面:HTML和CSS,当你了解所有规则后,你应该多写页面并记录你出现的问题,这才是学习HTML和CSS的最佳方法 这是我学习一段时间之后,再次回顾HTML,希望大家也对HTML有不一样 ...
- maven 项目发布时,无法引用 修改的domain 问题
其实是在bo 的smart-score 里面引用了这个interface 所以还要把 smart -Score 重新发布一下.让这个smart 引用 新的 Player-service 中的i ...
- 8个超炫酷的jQuery相册插件欣赏
在网页中,相册应用十分常见,如果你经常逛一些社交网站,那么你应该会注意到很多各式各样的网页相册应用.今天我们要来分享一些最新收集的jQuery相册插件,这些精美的jQuery相册插件可以帮助你快速搭建 ...
- Struts2学习笔记①
Struts2 学习笔记① 所有的程序学习都从Hello World开始,今天先跟着书做一个HW的示例. Struts2是一套MVC框架,使用起来非常方便,接触到现在觉得最麻烦的地方是配置文件.我的一 ...
- Tp框架之模型层
数据模型层是专门针对数据库来操作的 我们在home模块用一下数据模型层 先把配置修改好 我们先来打开这个文件 然后再打开think里面的主配置,把那里面关于数据库的部分,复制到home下的配置文件,然 ...