博客园客户端UAP开发随笔 -- App UI设计的三大纪律八项注意

前言

每一个页面都是这个App的门面,尤其是主页面,看上去干净整洁清爽宜人容易操作,那么你的App就成功了一半。这也反映出了你这个开发团队的基本审美素质和设计理念。如果你不是一个团队,而是一个个人开发者,建议你好好读读以下心得体会,相信会帮助你做出好看而实用的App。用一堆拥有丑陋UI的App充斥Window Store,不是我们高大上的程序员所为,被其他手机开发平台的开发者们耻笑。

三大纪律:

1)不乱用颜色。一个页面内不要超过3种颜色

2)不乱用大图片当背景。你是想让用户看你的背景图片呢,还是看你的内容?

3)不乱填充内容。页面元素如果太满,给读者压抑感,无所适从。

八项注意:我们从字号,字体,颜色,导航栏,标题栏,内容区,菜单栏,间距与对齐等八个方面介绍了我们开发App的心得体会。

字体

推荐一律使用Segoe WP字体。在特殊的显示符号的地方,可以使用其它字体,如:Segoe UI Symbol。有些字体在设计时可以呈现,但是在deploy到手机上后毫无效果,原因是手机上没有你指定的字体。

文字大小

在WP的设置中,有一项文字大小设置:

缺省时,文字最小,slider处于最左侧的位置。但是看邮件时太费劲啦,尤其是英文邮件,再加上喜欢坐城铁,基本上看几分钟我的K金狗眼就瞎了。所以我一般会把这个文字调到上图的大小。这时,WP内置的“节电模式”应用会这样:

看那个“节电模式”四个字,比上面的“设置”两个字大一些吧,这个页面的其它所有文字也都比正常要大。我不知道这是by design呢,还是bug呢?反正其它的内置App不这样。 这一点会被大多数人遗忘,以至于一些很有名头的App,或者是上述WP自带的App本身都掉入此坑。这个如何避免呢?

在Page中加入这么一句话即可:

<Page
......
    IsTextScaleFactorEabbled="False">

这个定义是告诉WP:我的App忽略那个文字大小调整的影响。否则,你所有的文字相关的控件,都会变得巨丑无比,整个UI就毁了。

在Windows 8.1中没有这个设置,因此以上代码只能在Windows Phone Project中编译通过,因此这句话要写在Page中,而不能写在任何Shared Project的XAML中。

主题色

看到应用商店中的很多简单的App都使用了黑色作为主题色,无非是以下几个原因之一:

1)是一个简单的App,没有designer,没仔细设计过,干脆用黑色的

2)看到Windows Phone自带的App都是黑色,以为黑色就是官方指定的

3)黑色上显示白色的字,天经地义,不用做特殊设置

4)黑色是万能搭配色

以上这些都可以理解。但是一个纯正的第三方App绝不可以用黑色,一个是避免和WP自带的App混淆,一个是避免别人以为你偷懒用个黑色在这里充数。反正我个人没见过哪个口碑好的App是用黑色的。如果是自己用黑色做个App随便玩玩也就罢了,一旦上传到应用商店去,就只能说明又多了一个屌丝了,注意素质。

最简单的避免成为屌丝的方法很简单:

1)定义一个主题色(比如就用红色怎么啦,和IT之家似的),用于标题栏,可点击文字(带link)等场合

2)定义一个浅主题色(可选),用于菜单栏

3)用一个白色或浅灰色(假设主题色是深色)做大字体颜色(比如标题栏之内的文字)

4)用一个深灰色做大量文本的颜色(在白色背景下)

反正一共就4种颜色就够了,足以展示程序员的素质了。如果要精益求精,还需要更多一些的颜色,比如作者/发布时间的颜色,摘要的颜色,以及下方attribution的颜色(推荐/阅读/评论)。

主题色也应该在Page中这样定义:

<Page
......
    RequestedTheme="Light"
......>

这样你就省去了在code中写this.RequestedTheme = Light的麻烦,这是为了做日间模式和夜间模式的切换。

状态栏

状态栏,就是Windows Phone顶部的那个大概有25像素高的横条,平时显示网络状态,时间,电池状态等等。下图中黑色的部分就是状态栏。

原则:不要轻易决定隐藏状态栏,除非你是在做一个游戏。因为在大多数情况下,用户是希望能随时看到自己的WIFI网络状态、电池状态和当前时间的。节省25个像素而用于显示更多的应用内容的想法有点儿小气。

如何隐藏状态栏呢?在Silverlight中,是在Page的XAML设置一个属性(忘记是什么了),但是在Win RT SDK中,目前知道的必须用code做这件事:

await Windows.UI.ViewManagement.StatusBar.GetForCurrentView().HideAsync();

一旦在一个页面内调用了上述语句,那么在该App本次的以后使用过程中,顶部状态条都不会再显示了,除非你再调用ShowAsync()来显示它。

如何让状态栏和你的App的色调搭配和谐呢?你应该在Page里这样定义:

<Page
......
    Background="{ThemeResource MyAppThemeColor}">

这里假设你在StyleDictionary.xaml里设置了MyAppThemeColor的值。这样的话,这个页面的状态栏也会被刷成应用主题色,一般来说会和你的这个页面的顶部标题栏颜色一致,看上去比较顺眼的啦。

但是这导致了一个问题:如果你的App有下方的命令栏(Command Bar)而且是淡蓝色背景,在页面切换动画时,能看到命令栏后面的深蓝色背景一闪而过,不太协调,原因是上面那个设置把整个页面都设置成了深蓝色,包括底部命令栏的后背景。这个虽然不是大问题,但作为程序员的我们一定要知道当有人Challenge这件事时,我们如何解决。

为了避免这个问题,我们可以只设置状态栏的背景色,而不设置页面背景,用code做:

Windows.UI.ViewManagement.StatusBar statusBar = Windows.UI.ViewManagement.StatusBar.GetForCurrentView();
statusBar.ForegroundColor = CNBlogsThemeColor;

但是别忘了去掉上面Page里的Background设置。

标题栏

博客园的标题栏设计如下:

特简单。注意了吗,页面上没有“博客园”或“CNBlogs”字样。同学们一般习惯把“博客园”字样作为Pivot的Title放在本页的最上方,但是仔细想想那有什么意义呢?人家用你这个App的人,知道你这是博客园,为何一定要占据宝贵的空间来展示自己的自恋情结呢?

另一个页的标题栏设计如下:

高度/颜色/字体等和其他页完全一致,切换页面时无跳跃感。和Android的App的最大区别是:由于Windows Phone有特定的底部Command Bar来放置命令按钮和菜单,所以顶部的标题栏一定不要再放任何可以操作的东西啦,而只能用于信息展示。比如上图,告诉你当前页面显示了热门博客的前20条。那个“2日内阅读排行”是一个辅助手段,告诉你当前页的具体展示类别。这么多字在标题栏里放不下,所以放在这里会随着ListView的滚动而上移从而隐藏。

内容区

内容区不要太杂,最好只放一类东西,除非你是在做那个叫做“找你妹”的游戏。如果只有一类内容,那么我们一般用ListView就搞定了。如果有两类以上的内容要显示,最好放在两个页面内;如果非要在一个页面内,就用这种方式:

用一个蓝条分开了不同种类的内容,而且每类内容可以单独展开或收起。这里你还可以选择用ListView的分组方式展示数据,第一个分组标题是“分类”,第二个分组标题是“博主”等等,但是不是最佳选择,因为两类内容的模板不一致,需要写很多code来实现。

菜单栏

菜单栏也有几个小技巧可以分享,看下图:

1)我们使用了主题色来显示菜单项和按钮(Foreground = CNBlogsThemeColor)

2)用淡雅主题色来作为菜单背景(在Flyout Menu的弹出式菜单中也是如此)(Background = CNBLogsThemeLightColor)

3)使用标准ICON做按钮,如果不够用,在Segoe UI Symbol中基本上可以找到你要的东西,就不要麻烦designer再去画了。如果非要自定义的话,就画一个25x25 png,放在40x40的png内。你可以试试其它尺寸,很难看的。

4)重要操作放在上面的按钮中(最多4个),不重要的放在菜单中,这个你自己定吧。

这个菜单栏的样式定义如下:

<Style TargetType="CommandBar">
    <Setter Property="Background" Value="{ThemeResource CNBlogsThemeLightColor}"/>
    <Setter Property="Foreground" Value="{ThemeResource CNBlogsThemeColor}"/>
</Style>

这个定义放在了StyleDictionary.xaml中,这样所有页面的菜单项都会是同一个样式了。

间距与对齐

间距是屌丝程序员经常忽视的问题,但其实它是隐藏最深的能影响用户体验的关键元素之一。我们举例说明吧,看下图:

每个红色的圆形都表示一个间距(人家Designer给的设计叫做Redline,用红色直线表示),对称位置的两个间距要保持一致,整个界面才能好看。比如1和2,3和4,5和6,7和8,都要保证数值一样。

从对齐上看,标题区的WinRT/Metro的左边距,ListViewHeader的左边距,以及每篇博客的左边距都是一致的。

再比如设置页面,也是丝毫不能马虎,看那些红色的线条的长度,必须保证一样长:

小结

Windows 8.1上的App对审美的要求其实更高,因为它的显示面积大,不像Windows Phone上可以随便用点儿什么手段就能填满屏幕。我们会有专门一篇Blog介绍博客园 UAP的Windows 8.1版本的界面设计。

作为同样屌丝的我,实在是写不出什么更好的东西,只是在和designer接触过程中学了些皮毛,让大家见笑了。总之几句话概括一下:注意颜色,注意字体,注意间距,注意内容。让我想起了解放军的三大纪律八项注意,违纪者扣6分罚200!把自己的脸整容成雷锋也不行!呵呵,又扯远了…

分享代码,改变世界!

Windows Phone Store App link:

http://www.windowsphone.com/zh-cn/store/app/博客园-uap/500f08f0-5be8-4723-aff9-a397beee52fc

Windows Store App link:

http://apps.microsoft.com/windows/zh-cn/app/c76b99a0-9abd-4a4e-86f0-b29bfcc51059

GitHub open source link:

https://github.com/MS-UAP/cnblogs-UAP

MSDN Sample Code:

https://code.msdn.microsoft.com/CNBlogs-Client-Universal-477943ab

MS-UAP

2015/1/12

时间: 2024-08-09 10:44:17

博客园客户端UAP开发随笔 -- App UI设计的三大纪律八项注意的相关文章

博客园客户端UAP开发随笔 -- App的心动杀手锏:动画

前言 在前面一篇“新年快乐”的随笔中,我们介绍了WinRT中的简单动画实现.其实在使用Windows/Windows Phone时,我们都会看到一些动画,最简单的比如按下一个button时,该button的状态变化就是动画的一种.再比如弹出式窗口或菜单,也是一种动画.WinRT中的动画种类很多,但是分类有点儿让初学者摸不着头脑:主题过渡,主题动画,视觉转换,情节提要动画.这些我们就不说了,这里主要说说自定义动画,或者说是情节提要动画(Storyboard Animation),因为这种动画是我们

博客园客户端UAP开发随笔 -- App连接云端内容的桥梁:WebView

当你辛苦的从网上爬下来一篇文章之后,怎么在你的应用内展示这些包含HTML标记的文章?如果你使用的是Javascript开发应用,恭喜你,直接塞进页面就可以了,同时说明你很熟悉页面开发,而现在windows也支持这种方式.但是对于使用XAML开发的应用怎么办呢?我们还有WebView控件可以用. 越来越多的服务器端API返回的数据使用HTML了,所以我们也不得不对WebView多了解一些. WebView有个Bug:放在Grid里时,最右侧有一个pixel缝隙时隐时现.要小心,别让PM抓住你的小辫

博客园客户端UAP开发随笔 – 让自己的App连接世界(2):WinRT中的内置分享

看到一篇眼前一亮的博文,是不是有一种希望其他小伙伴都能看到的感觉呢?有没有一种“不转不是程序员”的冲动呢?在 PC 浏览器上看到还好办,直接网址复制,另一边 IM 上就发过去了,但是如果是 App 中的内容,就没这么方便了,总不能那边 IM 上喊话:“隔壁老王,博客园上有篇叫‘博客园客户端(Universal App)开发随笔 – 为应用插上分享的翅膀’的博文超好看,要不你也瞅瞅?”.隔壁老王再去搜索就太麻烦了.可能你会说了,嗨,直接分享不就完了么.嗯,没错,就是分享功能.那么如何把分享功能引入

博客园客户端UAP开发随笔 -- 搭建App之间的桥梁

开发Windows Phone应用的同学们应该都注意到了,Windows Phone 为了安全性,对应用的限制还是比较多的.我记得一位360的同学很无奈的说:WP太安全了,我们这些做WP上360卫士的基本上没啥可做的.但是当WP360那个App出来后,还是有很多用户安装了呢,尽管真的对安全没什么太大的帮助,但是对用户了解自己的手机的使用情况还是有帮助的.其中一位用户的评价是:从android到PC,我一直用360, 所以在WP上我也用.呵呵,粉丝啊!具体有什么用其实他也不关心铁粉而已. 扯远了!

博客园客户端UAP开发随笔 -- 让你自己和你的App有国际范儿

大家是不是发现,在商店中看到的高大上的应用都有着多语言支持,可以根据操作系统的语言自动适配:或者可以通过用户的选择,显示对应的语言界面,确实很高大上呢.不过这个可不是什么难事,通过简单的几个步骤,让你的应用也高大上起来,支持多语言.这样在你以后的简历里,也可以写上:面向国际市场开发过多语言应用.听上去相当有底气! 0. 准备工作 在建立多语言支持前,首先要看一下 Manifest 文件中的默认语言选项,将它设置为你希望的默认显示语言. 接下来建立存放语言字符串的文件夹.如果是Universal

博客园客户端UAP开发随笔 -- 狡兔三窟:App内的三种通知消息的实现

使用应用时,总会有各种各样的交互,其中有些是需要和用户交互的,有些是仅仅告知用户某些信息的.对于前者,通常的解决方案都是弹出一个带有按钮(或其他控件)的对话框,上面有需要用户知晓的信息,以及需要用户通过按钮(或其他控件)做出的响应交互,这里就不再介绍.对于后者,那些不需要用户做出交互,仅仅是告知用户信息的,实现方式大家各有不同,本文将提出几种解决思路,抛砖引玉,希望通过交流,得到更好的人机交互解决方案. 1. 弹出窗口提示 这个方法比较简单粗暴,直接调用了系统的 MessageDialog 方法

博客园客户端UAP开发随笔 -- 让自己的App连接世界:WinRT中的微博分享

近年来社交app可谓红红火火,大家每天发微博,分享到朋友圈也是不亦乐乎.我们的Universal应用自然也希望加入社交分享的功能.然而国内主流的社交平台微博和微信还没有推出适用于Universal应用的SDK,怎么办呢?当然敲碗等开饭也是办法,另一方面我们也可以自己做一些努力.今天我们就想分享一下我们在Universal应用中实现分享到微博功能上的探索. 准备 想要分享到微博,先得注册成为微博开发者.我们在http://open.weibo.com/上注册好开发者账号,建立个测试应用,就可以拿到

博客园客户端UAP开发随笔 -- 奔跑吧,页面!

前言 页面导航,是App中的基本功,一般的App,一来一去,只需要简单的Navigate + Back就行了,一个复杂的App可能需要很多导航模式的混合才能实现最佳用户体验. SplashScreen 启动屏幕 我们先从最开始的SplashScreen说起吧.如果你把启动屏幕做成一个Page,启动时先显示一下,然后假装忙乎两秒,跳到下一个主页面开始进入正题,这个好像看上去也很美好.但是当用户玩命儿按Back键时,哦,露出马脚了,启动页面被唤出了.不过这个bug倒是不妨作为一个新奇的体验. MSD

博客园客户端UAP开发随笔--自定义控件的左膀右臂

前言 我们上一次说到了App的精灵:自定义控件.这一次,我们接着这一话题,说说自定义控件的两个得力助手: 选择器 - TemplateSelector 转换器 – Converter 这两个东西能帮助自定义控件更为简单方便地被使用,所以必须掌握. 数值转换器 Converter 这个大家可能不陌生,因为在MSDN里,介绍到Data Binding时,总会顺带着介绍一下数据转换,比如这个网页: http://msdn.microsoft.com/library/windows/apps/xaml/