Android ConstraintLayout vs Coordinator布局?
实施内容:Android ConstraintLayout vs Coordinator布局?,android,material-design,android-constraintlayout,coordinator-layout,Android,Material Design,Android Constraintlayout,Coordinator Layout,实施内容:ConstraintLayout或CoordinatorLayout用于在android中进行适当的材质设计?CoordinatorLayout旨在成为管理交互和动画等活动的顶级布局 ConstraintLayout的主要目标是提供一种方便的方法来创建包含多个子元素的平面布局(功能更强大的RelativeLayout) 因此,CoordinatorLayout用于管理活动组件的复杂行为(尤其是动画),并约束组件的正确放置(尤其是列表项)。CoordinatorLayout是一种功能强大
ConstraintLayout
或CoordinatorLayout
用于在android中进行适当的材质设计?CoordinatorLayout旨在成为管理交互和动画等活动的顶级布局
ConstraintLayout的主要目标是提供一种方便的方法来创建包含多个子元素的平面布局(功能更强大的RelativeLayout)
因此,CoordinatorLayout用于管理活动组件的复杂行为(尤其是动画),并约束组件的正确放置(尤其是列表项)。CoordinatorLayout是一种功能强大的框架布局。
CoordinatorLayout
用于两个主要用例:
- 作为顶级应用装饰或镀铬布局
- 作为与一个或多个子视图进行特定交互的容器
框架布局
,它们将相互重叠。FrameLayout
最常用于保存单个子视图。CoordinatorLayout
的主要吸引力在于它能够协调其中视图的动画和过渡。通过为协调布局的子视图指定,可以在单个父视图中提供许多不同的交互,并且这些视图也可以相互交互。视图类可以使用CoordinatorLayout.DefaultBehavior
注释指定作为CoordinatorLayout
的子视图时的默认行为
行为可用于实现各种交互和其他布局修改,从滑动抽屉和面板到滑动可拆卸的元素和按钮,这些元素和按钮在移动和设置动画时附着在其他元素上
ConstraintLayout是一个功能强大的视图组,类似于RelativeLayout,但比RelativeLayout更灵活。
ConstraintLayout
允许您创建具有平面视图层次结构(无嵌套视图组)的大型复杂布局它类似于RelativeLayout,因为所有视图都是根据同级视图和父布局之间的关系进行布局的,但它比RelativeLayout更灵活,更易于与Android Studio的布局编辑器一起使用
可以在任何地方使用,一旦开始使用ConstraintLayout
,就不需要任何其他视图组,如ConstraintLayout
、RelativeLayout
或LinearLayout
FrameLayout
- 相对定位
- 边距
- 定心定位
- 圆形定位
- 可见性行为
- 尺寸约束
- 锁链
- 虚拟辅助对象
- 优化器
ConstraintLayout
或协调布局
,以便在android中进行正确的材质设计?
您可能需要同时使用ConstraintLayout
和CoordinatorLayout
来构建高效的UI和材质动画
下面给出了一个使用协调布局
和约束布局
的常见示例,供您参考
- 使用
作为顶级应用程序装饰。它通常用于布局Coordinatorlayout
,AppBarLayout
,以及屏幕主体,如FloatingActionButton
。在嵌套的滚动视图中,使用NestedScrollView
将布局的其余部分描述为平面层次结构ConstraintLayout
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <androidx.core.widget.NestedScrollView android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior"> <!-- Your scrolling content --> <androidx.constraintlayout.widget.ConstraintLayout ...> <!-- body of constraint layout --> <Button android:id="@+id/button" ... app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent/> </androidx.constraintlayout.widget.ConstraintLayout> </androidx.core.widget.NestedScrollView> <com.google.android.material.appbar.AppBarLayout android:layout_height="wrap_content" android:layout_width="match_parent"> <androidx.appcompat.widget.Toolbar ... app:layout_scrollFlags="scroll|enterAlways"/> <com.google.android.material.tabs.TabLayout ... app:layout_scrollFlags="scroll|enterAlways"/> </com.google.android.material.appbar.AppBarLayout> </androidx.coordinatorlayout.widget.CoordinatorLayout>
它是用于构建动画的
的子类。 对于使用ConstraintLayout
的自定义动画,您(几乎)总是使用MotionLayout
协调布局,有时在内部使用
约束布局。请参阅以下参考资料
- 位于的codelab仅使用协调器布局
- 示例android sunflower应用程序(“演示android开发最佳实践”)既不用于顶级活动,也在其内部使用,其中
位于ConstraintLayout
内部:CoordinatorLayout
<layout ...> <data .../> <android.support.design.widget.CoordinatorLayout ...> <android.support.design.widget.AppBarLayout ...> <android.support.design.widget.CollapsingToolbarLayout ...> <ImageView... /> <android.support.v7.widget.Toolbar... /> </android.support.design.widget.CollapsingToolbarLayout> </android.support.design.widget.AppBarLayout> <android.support.v4.widget.NestedScrollView ...> <android.support.constraint.ConstraintLayout ...> <TextView.../> <TextView... /> </android.support.constraint.ConstraintLayout> </android.support.v4.widget.NestedScrollView> <android.support.design.widget.FloatingActionButton ... /> </android.support.design.widget.CoordinatorLayout> </layout>
- @Darish对此有一个非常全面的答案。
我赞同他所说的一切,只想补充一点信息。根据我的经验,大多数情况下,作为父视图的约束布局已经足够好了。当您需要引入协调器布局时,您需要管理特定的行为(例如底部工作表)。如果您不使用Coordinator Layout的行为功能,或者由于Coordinator Layout充当“超级框架布局”而试图处理多个视图,那么Coordinator Layout的麻烦就大了
不久前,我写了一篇博客文章,其中举例说明了协调器与约束布局的区别和用法
我还建议使用MotionLayout插件,这是一种非常全面的方法,可以在不需要太多额外代码的情况下为布局添加动画!是开始使用MotionLayout的好方法。这是一个很好的例子。用于数据绑定;对于viewmodel参数;协调和动画工具栏,工厂等;用于保存视图。