大数跨境
0
0

浅谈Android布局中的网格系统

浅谈Android布局中的网格系统 点融黑帮
2018-08-17
1
导读:采用网格系统实现 Android 视图高效布局


本文中的 Android 特指原生 Android 系统


什么是网格系统

网格系统最早来源于排版印刷,是一种组织页面元素的骨架,如图:

“网格系统的特点是重视比例、秩序、连续感和现代感。以及对存在于版面上的元素进行规划、组合、保持平衡或者打破平衡,以便让信息可以更快速、更便捷、更系统和更有效率的读取;另外最重要的一点是,负空间的规划(即:留白)也是网格系统当中非常重要的部分。 —— 引用自维基百科


更多关于网格系统的内容,可以参阅《Grid Systems》( 中文版《平面设计中的网格系统》 )


Android 中的网格系统

Android 从 Holo 风格(3.x ~ 4.x)到 Material Design(5.x 以上),视觉上发生了质变,但有一点从未发生改变,这就是 Android 的 8dp 网格系统(8dp grid)。

dp 是 Android 的一种度量单位(类似于 iOS 的 pt),不同设备生产商的配置会有所差异,大部分 Android 手机的宽度为 320dp 或者 360dp

熟悉 Android 的同学应该都知道 8dp 在 Android 的布局中是一个神奇的数字,比如:

• 最外围布局离屏幕左右两边的间距为 16dp

• 控件之间的间距通常为 8dp

• Holo 风格中的 Action Bar 高度为 48dp,Material Design 中的 Action Bar 高度为 56dp

• Material Design 中 Floating Action Button 的尺寸为 56dp x 56dp 或者 40dp x 40dp

注:以上为「手机」布局中的尺寸

可以看到,Android 中有很多与间距和尺寸相关的值均为 8dp 的倍数,这当然不是巧合。

Android 的网格系统的特点在于:将 8dp 作为基准尺寸,不仅用作元素之间的间距规范,同时也用作元素的尺寸规范。

但这并不意味着将屏幕划分为 8dp x 8dp 的小格子,下图具有一定的误导性:

原因在于并非所有的设备屏幕尺寸都是 8dp 的倍数,比如 Pixel 一代 的尺寸是 411dp x 731dp。


网格系统优势


视觉一致性

用户在不同的 应用/页面 间切换时,保证了整体布局的一致性。同时像 Action Bar、Floating Action Button 这些通用控件尺寸的一致性,可以在一定程度上减少用户的学习成本。


加速设计流程、减少沟通成本

设计过程中,网格系统建立了一套统一标准,可以有效减少设计验收阶段各种需要回炉微调的情况(不少前端开发者应该都遇到过设计师要求调整几个像素间距的情况)。

开发过程中,开发者最痛苦的莫过于设计师没提供标注,这种情况下,网格系统的优势是非常明显的,大部分情况下,普通人肉眼就能判断出元素之间的间距大小。

网格系统有助于开发者实现设计师要求的像素级完美。

这里的像素级完美不是指页面等比例放大,试想你换了一台大屏手机用来看小说,结果字体变大了,但是字数没发生任何变化


可复用性

开发者仅需定义少量的尺寸即可满足大部分使用情况,如图:


响应式设计

示例1:

上图中,假设页面的宽度为 360dp,按钮的宽度为 320dp,开发者很有可能会这样来布局

在屏幕较小的设备上,这将导致按钮沾满整个横向空间,导致这种问题的原因在于标注很难表现多种设备的显示效果(意味着需要多套图)。正确的写法如下:

示例2:

上图为比较常见的一种布局,开发者有可能会这样来布局

假如 text1 的文字量超过一行,问题就出现了

导致这种问题的原因在于 text1 与 text2 之间的间距一般在效果图的标注上是得不到体现的。正确的写法可以是这样:

/drawable/space_16dp.xml

效果如下:

这种写法的另一个优势在于当某个元素需要动态隐藏时,布局仍然不会出错。

总结

Android 的网格系统提供了一套页面布局的规范,理解并应用这套规范,即便是一般的开发者也可以写出统一工整的界面。在分工明确的开发流程中,网格系统能够有效地减少沟通成本,提升工作效率,避免很多常见的错误发生。规则是用来打破的!



今日推荐




【声明】内容源于网络
0
0
点融黑帮
点融黑帮——一个充满激情和梦想的技术团队,吸引了来自金融及信息科技领域的顶尖人才。我们正在用技术创新改变传统金融。
内容 374
粉丝 0
点融黑帮 点融黑帮——一个充满激情和梦想的技术团队,吸引了来自金融及信息科技领域的顶尖人才。我们正在用技术创新改变传统金融。
总阅读477
粉丝0
内容374