Material Design 开发利器:Android Design Support Library 介绍

简介: 转自:https://blog.leancloud.cn/3306/   Android 5.0 Lollipop 是迄今为止最重大的一次发布,很大程度上是因为 material design —— 这是一门新的设计语言,它刷新了整个 Android 的用户体验。

转自:https://blog.leancloud.cn/3306/

 

Android 5.0 Lollipop 是迄今为止最重大的一次发布,很大程度上是因为 material design —— 这是一门新的设计语言,它刷新了整个 Android 的用户体验。但是对于开发者来说,要设计出完全符合 material design 哲学的应用,是一个很大的挑战。Android Design Support Library 对此提供了很好的支持,里面汇集了很多重要的 material design 控件,支持所有 Android 2.1 及后续版本。里面你可以看到 navigation drawer view、floating labels、floating action button、snackbar、tabs,以及一套将它们紧密结合在一起的动作与滚动框架

 

Navigation View(导航视图)

无论从应用标识、内容导航,还是设计一致性来讲,navigation drawer 都是首当其冲的焦点。现在,NavigationView 让导航栏变得更简单,它提供了 navigation drawer 需要的框架,以及通过资源文件来自定义更多菜单项的能力。

 

navigationview

你只需要将 NavigationView 作为 DrawerLayout 的内容视图来使用即可,例如:

drawerlayout

这里你会注意到两个属性:app:heanderLaytout 用来控制 header 部分的布局;app:menu 指定了菜单资源。NavigationView 自动处理了状态栏的变化,保证可以在 API 21+ 的设备上正确运行。

最简单的 drawer 菜单就是一个允许选择的菜单项集合,例如:

simplemenu

选中的菜单会高亮显示,以提醒用户当前选择的是哪个菜单项。

你也可以在菜单中使用 subheader 来实现独立的分组:

subheader_menu

调用 setNavigationItemSelectedListener() 后,在菜单项被选中的时候,你会通过OnNavigationItemSelectedListener 得到回调。在处理回调时,你会知道是哪个菜单项被点击,此时你可以处理选择事件,修改选中状态,加载新的内容,以及通过代码来关闭 drawer,或者其他任何你想执行的操作。

文字输入时的悬浮标签

尽管 EditText 已经为 material design 做了一些改善,但是还不够,譬如它在我们输入第一个字符的时候,就会自动隐藏掉提示标签。现在你该使用 TextInputLayout 了,它会在用户开始输入之后,自动将提示标签悬浮到 EditText 上方,这样用户就永远都能知道输入内容的上下文。

floatinglabel

另外,你也可以通过调用 setError() 方法,在 EditText 下方显示一个出错提示消息。多么贴心的设计,有没有?

Floating Action Button(浮动操作按钮)

Floating action button 是一个圆形按钮,代表当前页面最重要的交互动作。Design Library 里面的 FloatingActionButton 给了你一个简单一致的实现,它会默认使用你主题中 colorAccent 属性定义的色调。

actionbutton

在标准尺寸之外,它也支持 mini 尺寸。FloatActionButton 继承自 ImageView,所以你也可以使用android:src 或者其他方法(如 setImageDrawable())来控制它的外观。

Snackbar

如果要提供一个轻量、快速的操作反馈方式,那就非 Snackbar 莫属了。Snackbar 在屏幕最下方展示,包含文字和一个可选的操作,它会在一定时间后自动消失,用户也可以通过滑动手势来提前消除它。

查看Snackbar效果请点击(打不开时候注意FQ)

Snackbar 可以支持滑动手势,也可以响应点击动作,远比 Toast 强大,但是你会发现它的 API 非常眼熟:

Snackbar
.make(parentLayout, R.string.snackbar_text, Snackbar.LENGTH_LONG)
.setAction(R.string.snackbar_action, myOnClickListener)
.show(); // Don’t forget to show!

你会注意到 make 的第一个参数,Snackbar 会试图寻找合适的父视图,来确保它能显示在底部的正确位置。

Tabs(选项卡)

在应用内,通过 tab 在不同视图间切换,这不是 material design 中的新概念。Tabs 一般用来作顶层导航,或者组织、展示应用内不同分组的内容。如下图所示:

tabs

Design Library 的 TabLayout 控件实现了固定 tab(所有 tab 平分秋色,宽度固定)和滚动 tab(宽度根据标题长度自适应,可以水平滑动)两种形式,你可以用代码来添加 tab:


TabLayout tabLayout = ...;
tabLayout.addTab(tabLayout.newTab().setText("Tab 1"));

如果你使用 ViewPager 来水平分页,可直接在 PagerAdapter.getPageTitle() 中来创建 tab,最后通过 setupWithViewPager() 方法将它们绑定在一起。这能确保内容变化时 tab 和 ViewPager 会自动同步起来。

CoordinatorLayout、动画和滚屏

打造一个符合 material design 风格的应用,独特的视觉效果只是一方面,动作和手势也是非常重要的一部分。 Material design 里面包含了大量的手势,譬如点击的波纹效果和其他一些有用的转场动画。Design Library 介绍了 CoordinatorLayout 的布局方式,它提供了一个附加层,用来控制子视图间的点击事件,Design Library 里面很多控件都使用了这种布局。

CoordinatorLayout 和浮动操作按钮

FloatingActionButton 就是一个绝好的例子。当你将 FloatingActionButton 作为子元素加入 CoordinatorLayout,然后将 CoordinatorLayout 作为参数传给 Snackbar.make() 的时候,Snackbar 没有显示到 FloatingActionButton 上面。FloatingActionButton 利用了 CoordinatorLayout 提供的额外回调接口,在 Snackbar 展现的时候自动上移,消失的时候自动复位,所有这一切都不需要写任何代码。

查看效果请点击(打不开时候注意FQ)

CoordinatorLayout 还提供了一个 layout_anchor 的属性,连同 layout_anchorGravity 一起,可以用来放置与其他视图关联在一起的悬浮视图(如 FloatingActionButton)。

CoordinatorLayout 和 App Bar

CoordinatorLayout 的另一个主要使用场景,则与 appbar(以前的 actionBar)和滚屏相关。你可能已经在布局里面使用过 Toolbar,它允许你简单修改外观、整合图标以和其余部分一致。Design Library 将所有这些东西放到了下一级:使用 AppBarLayout,让你的 Toolbar 和其他视图(如 TabLayout 提供的 tab 视图),可以响应 ScrollingViewBehavior 标记的同级视图的滚动事件。此时你可以这样来创建一个布局:

coordinator_appbar

现在,随着用户滚动 RecyclerView, AppBarLayout 也会响应这些事件(通过使用子节点的 scroll flag 来控制它们如何滚入和滚出屏幕)。Flags 包括:

  • scroll: 这个标志会被设置到所有希望滚出屏幕的视图上,如果不设置这一标志,则视图会被一直保留在屏幕顶部。
  • enterAlways: 这个标志会确保任何下滑滚屏都会触发视图的展现,等于开启了一种「快速返回」模式。
  • enterAlwaysCollapsed: 如果设置了 minHeight 和这个标志,你的视图通常会折叠显示,只有当滚动视图已经到达了它的顶点以后才会打开到完整高度。
  • exitUntilCollapsed: 这个标志会导致视图在退出之前,一直被锁定。

注意一点:所有设置了 scroll 标志的视图必须在未设该标志的视图之前进行声明,这样可以确保所有的滚动视图都从顶部退出,而固定元素都不受影响。

可伸缩的 Toolbars

直接将 Toolbar 加到 AppBarLayout 中,你就可以设置 enterAlwaysCollapsed /exitUntilCollapsed 等滚动标志,但是不同元素如何响应折叠动作,你没法更深入地控制。要达到这一点,你需要使用 CollapsingToolbarLayout:

coordinator_toolbar

通过使用 app:layout_collapseMode="pin" 来确保 Toolbar 会一直被保留在屏幕顶端。更进一步,当你组合使用 CollapsingToolbarLayout 和 Toolbar,在视图完全展现的时候,标题会自动放大,当视图折叠的时候,标题则会过渡到默认字号。注意这时候你需要调用 CollapsingToolbarLayout 的 setTitle(),而不是 Toolbar 的相应方法。

 

除了将视图固定在屏幕之外,你还可以设置 app:layout_collapseMode="parallax"(额外也需要增加 app:layout_collapseParallaxMultiplier="0.7" 这样的属性来设置视差乘数)来达到视差滚动的效果。这种用法搭配 app:contentScrim="?attr/colorPrimary" 属性效果非常好,例如下面这样:

CoordinatorLayout 和自定义视图

还有一件重要的事情就是,CoordinatorLayout 并不是天生就理解 FloatingActionButton 或者 AppBarLayout 如何工作,它只是提供了一些 Coordinator.Behavior 的附加 API,允许子控件来更好地控制点击事件和手势。

视图也可以使用 CoordinatorLayout.DefaultBehavior(YourView.Behavior.class) 来定义一个默认的行为,或者在 layout 文件中设置app:layout_behavior="com.example.app.YourView$Behavior" 来达到同样的效果。

Design Library 框架允许任何视图与 CoordinatorLayout 组合使用。

现已发布

Design Library 现在已经公开发布了,请确认在 SDK manager 中升级 Android Support Repository。对于 Gradle 项目来讲,你可以直接加入对 Design Library 的依赖:

compile 'com.android.support:design:22.2.0'

注意 :Design Library 依赖于 Support v4 和 AppCompat Support 库,它们会自动被加进编译依赖里来。并且,这些新的 widget 在 Android Studio Layout 编辑器中也是可用的(在 CustomView 中找到他们)。

对于构建一个具有一流外观和交互的现代应用,Design Library、AppCompat 和所有 Android Support Library 都是非常重要的工具,大家快来动手试试吧。

目录
相关文章
|
3天前
|
Linux 编译器 Android开发
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
在Linux环境下,本文指导如何交叉编译x265的so库以适应Android。首先,需安装cmake和下载android-ndk-r21e。接着,下载x265源码,修改crosscompile.cmake的编译器设置。配置x265源码,使用指定的NDK路径,并在配置界面修改相关选项。随后,修改编译规则,编译并安装x265,调整pc描述文件并更新PKG_CONFIG_PATH。最后,修改FFmpeg配置脚本启用x265支持,编译安装FFmpeg,将生成的so文件导入Android工程,调整gradle配置以确保顺利运行。
24 1
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
|
26天前
|
Java Android开发
Android 开发获取通知栏权限时会出现两个应用图标
Android 开发获取通知栏权限时会出现两个应用图标
12 0
|
17天前
|
XML 开发工具 Android开发
构建高效的安卓应用:使用Jetpack Compose优化UI开发
【4月更文挑战第7天】 随着Android开发不断进化,开发者面临着提高应用性能与简化UI构建流程的双重挑战。本文将探讨如何使用Jetpack Compose这一现代UI工具包来优化安卓应用的开发流程,并提升用户界面的流畅性与一致性。通过介绍Jetpack Compose的核心概念、与传统方法的区别以及实际集成步骤,我们旨在提供一种高效且可靠的解决方案,以帮助开发者构建响应迅速且用户体验优良的安卓应用。
|
19天前
|
监控 算法 Android开发
安卓应用开发:打造高效启动流程
【4月更文挑战第5天】 在移动应用的世界中,用户的第一印象至关重要。特别是对于安卓应用而言,启动时间是用户体验的关键指标之一。本文将深入探讨如何优化安卓应用的启动流程,从而减少启动时间,提升用户满意度。我们将从分析应用启动流程的各个阶段入手,提出一系列实用的技术策略,包括代码层面的优化、资源加载的管理以及异步初始化等,帮助开发者构建快速响应的安卓应用。
|
19天前
|
Java Android开发
Android开发之使用OpenGL实现翻书动画
本文讲述了如何使用OpenGL实现更平滑、逼真的电子书翻页动画,以解决传统贝塞尔曲线方法存在的卡顿和阴影问题。作者分享了一个改造后的外国代码示例,提供了从前往后和从后往前的翻页效果动图。文章附带了`GlTurnActivity`的Java代码片段,展示如何加载和显示书籍图片。完整工程代码可在作者的GitHub找到:https://github.com/aqi00/note/tree/master/ExmOpenGL。
21 1
Android开发之使用OpenGL实现翻书动画
|
19天前
|
Android开发 开发者
Android开发之OpenGL的画笔工具GL10
这篇文章简述了OpenGL通过GL10进行三维图形绘制,强调颜色取值范围为0.0到1.0,背景和画笔颜色设置方法;介绍了三维坐标系及与之相关的旋转、平移和缩放操作;最后探讨了坐标矩阵变换,包括设置绘图区域、调整镜头参数和改变观测方位。示例代码展示了如何使用这些方法创建简单的三维立方体。
15 1
Android开发之OpenGL的画笔工具GL10
|
26天前
|
Android开发
Android开发小技巧:怎样在 textview 前面加上一个小图标。
Android开发小技巧:怎样在 textview 前面加上一个小图标。
12 0
|
26天前
|
Android开发
Android 开发 pickerview 自定义选择器
Android 开发 pickerview 自定义选择器
12 0
|
27天前
|
缓存 Java Android开发
安卓应用开发中的内存优化策略
在移动应用开发领域,性能一直是衡量应用质量的重要指标之一。特别是对于安卓平台,由于设备的硬件配置多样化,内存管理成为开发者面临的重大挑战。本文将深入探讨针对安卓平台的内存优化技巧,包括内存泄漏的预防、合理使用数据结构和算法、以及高效的资源释放机制。通过这些方法,开发者可以显著提升应用的性能和用户体验。
|
1月前
|
Java Android开发
Android开发系列全套课程
本系列课程面向有java基础,想进入企业从事android开发的计算机专业者。学习搭配实战案例,高效掌握岗位知识。
18 1