前言
Material Design 是 Google 推出的一种全新的设计语言,它提出了许多新概念和新能力,其中最受欢迎的是 CoordinatorLayout。 CoordinatorLayout 是一个可以协调子控件之间的交互行为,例如当你的 RecyclerView 滚动时,使用该布局的 AppBarLayout 将自动滚动到屏幕外,并展现出一个固定的 Toolbar。
CoordinatorLayout 的基本使用
引入依赖
使用前需要在模块的 build.gradle 文件中添加以下依赖:
implementation 'com.google.android.material:material:1.3.0'
布局文件结构
在布局文件中,使用 CoordinatorLayout 作为根布局,然后添加我们需要的子布局,这里以 AppBarLayout 和 RecyclerView 为例:
-- -------------------- ---- ------- ---------------------------------------------------- ----------------------------------- ------------------------------------- ------------------------------------------------ ----------------------------------- ------------------------------------- ----------------------------------------------------------- ----------------------------------- ------------------------------------ --------------------------------------------------- ---------- ----------------------------------- ----------------------------- ----------------------------- ------------------------------ ---------------------------------- -- ---------------------------------- ------------------------- ----------------------------------- ------------------------------------------- ----------------------------- -- ------------------------------------------------------------- -------------------------------------------------- ------------------------------------------ ------------------------------ ----------------------------------- ------------------------------------ ----------------------------- ------------------------------------------------------------ -- ------------------------------------------------------
在上述布局文件中:
- CoordinatorLayout 是根布局;
- AppBarLayout 和 RecyclerView 是其直接子布局;
- CollapsingToolbarLayout 是 AppBarLayout 的直接子布局,并且它的布局属性 app:layout_scrollFlags="scroll|exitUntilCollapsed" 指定当 RecyclerView 滚动时,该布局将同时滚动并最终会折叠,其中 exitUntilCollapsed 表示在完全折叠之前该布局会保持在视图范围内;
- ImageView 和 Toolbar 是 CollapsingToolbarLayout 的直接子布局,并且它们都有一个布局属性,app:layout_collapseMode,其值分别为 parallax 和 pin。parallax 表示当 CollapsingToolbarLayout 折叠时,ImageView 仍然可以移动并产生视差效果,而 pin 表示当 CollapsingToolbarLayout 完全折叠时,Toolbar 将固定在顶部不动。
实现效果
在运行代码之前,先看一下上述布局实现的效果:
CoordinatorLayout 的优化
虽然 CoordinatorLayout 很好用,但是在实现复杂布局的时候,它有时也会出现一些卡顿的现象,尤其是当子控件非常多的时候。下面我们来介绍一些优化 CoordinatorLayout 的方法。
避免不必要的嵌套
当然,一个更好的方法是尽可能减少使用 CoordinatorLayout,因为不必要的嵌套会导致性能下降。例如,我们可以使用 FrameLayout 替代 CoordinatorLayout + AppBarLayout 实现折叠效果。
使用 @Keep 注解
因为 CoordinatorLayout 中有很多自定义的 View,所以当遇到混淆时,可能会出现问题。为了解决这个问题,我们需要在自定义的 View 上添加 @Keep 注解,如下所示:
-- -------------------- ---- ------- ------ ------------------------- ----- ------ ----- ------------ ------- ---- - ------ -------------------- -------- ------------ ------ - -------------- ------- -- --- - -- --- -
使用滑动顺滑模式
在设置 CoordinatorLayout 的滑动效果时,有两种模式:SMOOTH 和 SNAPSHOT。SMOOTH 模式会使布局滑动更加顺畅,因此建议优先使用 SMOOTH 模式。如下所示:
-- -------------------- ---- ------- ---------------------------------------------------- ----------------------------------- ------------------------------------ ------------------------------------------------------------ ------------------------------- ---- --- --- ------------------------------------------------------
总结
通过本文的介绍,我们学习了 CoordinatorLayout 的基本使用和优化方法。当然,该技术还有很多使用场景和用法,读者可以在实际工作中不断进行学习和实践。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6548a2eb7d4982a6eb2e72d2