介绍
Material Design 是 Google 推出的一套全新的设计语言,它不仅是一种设计风格,更是对设计规范的全新定义。在 Material Design中,全新的视觉效果以及交互方式都得到了极大的重视。而 CoordinatorLayout 算是 Material Design 框架下的一种布局控件,它可以帮助开发者更加方便的实现 Material Design 设计风格。
CoordinatorLayout 简介
什么是 CoordinatorLayout?
CoordinatorLayout 是 Android Support Design 库提供的一种布局控件,它继承自 ViewGroup。在 Material Design 中,一个界面的许多元素往往需要协同工作,以达到特定的交互效果,而 CoordinatorLayout 就为此提供了比较好用的方式。
CoordinatorLayout 的优势
通过使用 CoordinatorLayout,开发者可以轻松实现许多复杂协同工作,比如惯性滚动、响应式点击、弹性动画等。同时,它还支持定制的布局管理器,而这些优点都能有效地推进应用的开发以及提高用户的体验。
CoordinatorLayout 的使用方法
基本使用
在 XML 中,我们需要把我们要协同操作的控件放在 CoordinatorLayout 之中。在 CoordinatorLayout 中,控件的顺序并不重要,但有一个重要的属性叫做 app:layout_behavior,这个属性可以决定一个控件和其他控件的关系和协同动作。当 app:layout_behavior 属性被设置之后,CoordinatorLayout 容器会自动解析一些必要的信息,然后依据这些信息进行自调整。
下面是一个简单的使用示例:
-- -------------------- ---- ------- ------------------------------------------------ ------------------------------------ ----------------------------------- ------------------------------------- ------------------------------------------- ------------------------------- ----------------------------------- ------------------------------------ ---------------------------------------------- ---------------------------------- ------------------------- ----------------------------------- ------------------------------------------- --------------------------------------- --------------------------------------------- --------------------------------------------- ------------------------------------------- ------------------------------------ ----------------------------------- ------------------------------------ ------------------------------------------------------------- --------- ----------------------------------- ----------------------------------- ------------------------------------ ----------------------------------- --------------------------------------------- --------------------------------------------------展开代码
上面的示例中,我们使用了 CoordinatorLayout、AppBarLayout、Toolbar、NestedScrollView 和 TextView 这这些控件来对一个简单列表进行排版。其中,Toolbar 通过设置 app:layout_scrollFlags="scroll|enterAlways"来实现随着滚动的出现和隐藏,而 NestedScrollView 则通过设置 app:layout_behavior="@string/appbar_scrolling_view_behavior"来告诉 CoordinatorLayout 这个控件也需要与 Toolbar 协同工作。最后,TextView 用来填充一些其他的内容。
CoordinatorLayout 的一些高级技巧
Behaviors
在 CoordinatorLayout 上,每个控件都可以使用 Behavior 属性。Behavior 的意思是控件和其他控件之间的协同行为,也就是定义控件在和其他控件(或容器)组合使用时所需要的特定行为。Behavior 可以让你更加精细地调整组件之间的关联。如果你想自定义一些控件的 Layout Behavior,你可以通过实现 CoordinatorLayout.Behavior 接口并创建自定义的 Behavior 类来实现。
以下代码是自定义 Behavior 的示例:
-- -------------------- ---- ------- ------ ----- -------------- ------- -------------------------------- - ------ ---------------- - -------- - ------ ---------------------- -------- ------------ ---- - -------------- ----- - --------- ------ ------- --------------------------------- ------- ---- ------ ---- ----------- - ------ ---------- ---------- ------------- - --------- ------ ------- ---------------------------------------- ------- ---- ------ ---- ----------- - --- ------------ - ----------------------- --- --------- - ----- ------------------ - ------------ - ------------------- --------------------------------- ------ ----- - -展开代码
在上述代码中,我们重写了 layoutDependsOn 方法和 onDependentViewChanged 方法。layoutDependsOn 方法用于询问 Behavior 是否需要依赖者,这里我们让它依赖 AppBarLayout,因为我们希望它能够接收一些动画效果。在 onDependentViewChanged 方法中,我们根据依赖视图的变化来移动我们的自定义视图。
Snap ScrollView
Snap ScrollView 是一个在 CoordinatorLayout 中使用的滚动视图,它可以让你更加精确地控制视图的垂直位置(通常是页眉、页脚、广告栏 等),而不需要自己编写一些复杂的代码。启用 Snap ScrollView,只需在 NestedScrollView 中添加 app:layout_behavior="@string/appbar_scrolling_view_behavior" 及 app:layout_scrollFlags="scroll|enterAlways|snap",然后通过在布局文件的 xml 内添加 app:behavior_collapseTopHeader="@id/appBarLayout" ,和在代码中添加监听事件达到目的即可。
下面是自定义 Snap ScrollView 的示例:
-- -------------------- ---- ------- ------ ----- ------------------------- ------- ------------------- - --------- ------ ---- ----------------------------------- ------------- ------------------ ------ ----- --- --------- - --------------------------- -------------- - --- ----------------------------------------------- - --------- ------ ------ ---------------------------------- --------------- - ------ ------------------------------------------------------------------------------ - --------- --------- --- --------------------------- - ------ -------------- - -- ------------------------------------------- ---------------------------------- - -展开代码
常见问题
为何 CoordinatorLayout 控件需要在 Android Support Design 库中?
CoordinatorLayout 控件是以及带有 design 前缀的各种控件组成的设计支持库的一部分,而这个库是为 Android 5.0 或更高版本提供的。如果你在低于 Android 5.0 的设备上使用 CoordinatorLayout 控件,那么系统会加载 Support Library 或 AppCompat 库,以便实现兼容性。
如何禁用掉 CoordinatorLayout 的自动协同行为?
CoordinatorLayout 中可以通过移除控件的 app:layout_behavior 属性来禁用控件的自动协同行为。如果需要重新启用,只需设置一个新的 Behavior 对象即可。以下是代码示例:
-- -------------------- ---- ------- ------ ----- ------------- ------- ----------- - ------ --------------------- -------- ------------ ------ - -------------- ------- - ------ --------------------- -------- - --------------- - ------ ---- -------------------------- ---------- - -- ----------- - ------------------------------ ------------ - -------------------------------- ------------------ ---------------------------- -------------------------------------- - ---- - ------------------------------ ------------ - -------------------------------- ------------------ ------------------------------- - - -展开代码
到这里,我们就学习了 CoordinatorLayout 的使用方法,希望对于 Material Design 界面的开发有所帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67c3da56314edc2684e057c1