ConstraintLayout与协调员布局?

时间:2016-12-02 10:13:36

标签: android material-design android-constraintlayout coordinator-layout

要实现什么:ConstraintLayoutCoordinatorLayout在android中正确设计材料?

4 个答案:

答案 0 :(得分:55)

CoordinatorLayout 旨在成为管理Behaviors的活动的顶级布局,例如互动和动画。

ConstraintLayout 的主要目标是提供一种方便的方法来创建包含多个孩子的平面布局(更强大的RelativeLayout)。

因此,CoordinatorLayout将管理活动组件的复杂行为(尤其是动画),以及组件正确放置的ConstraintLayout(尤其是列表项)。

答案 1 :(得分:33)

  

CoordinatorLayout

CoordinatorLayout是一个超级动力的FrameLayout。

默认情况下,如果向FrameLayout添加多个子项,它们将相互重叠。最常使用FrameLayout来保存单个子视图。 CoordinatorLayout的主要吸引力在于它能够协调其中的视图的动画和过渡。

  

ConstraintLayout

ConstraintLayout允许您使用平面视图层次结构创建大型复杂布局(无嵌套视图组)。 与RelativeLayout类似,因为所有视图都是根据兄弟视图和父级布局之间的关系进行布局的,但它比RelativeLayout更灵活,更易于使用Android Studio& #39;布局编辑。

  

如何在Android中实现ConstraintLayout或CoordinatorLayout以进行正确的材质设计?

您可能需要同时使用ConstraintLayout和CoordinatorLayout来构建高效的UI和素材动画。

答案 2 :(得分:11)

似乎您(几乎)总是使用CoordinatorLayout,有时甚至在内部使用ConstraintLayout。请参阅以下资源

  • https://codelabs.developers.google.com/codelabs/material-design-style/index.html#3的代码实验室仅使用CoordinatorLayout

  • 示例android-sunflower应用程序(“说明Android开发最佳实践”)既不用于顶层活动,却在fragment_plant_detail.xml内部使用,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>
    

答案 3 :(得分:0)

@Darish对此有一个很好的综合答案。 我赞同他所说的一切,只想补充一点信息。以我的经验,在大多数情况下,将约束布局作为父视图就足够了。当需要引入协调器布局时,就是您要管理特定行为(例如,底页)。如果您将不使用CoordinatorLayout的行为功能,或者由于CoordinatorLayout充当“超级功能FrameLayout”而试图弄乱多个视图,那么Coordinator Layout所带来的麻烦将比其应有的麻烦多。

不久前,我写了一篇博客文章,阐述了协调器与约束布局的区别和用法。 Check it out here if you are interested.

我还将第二次使用MotionLayout插件,这是一种无需添加太多代码即可将动画添加到布局的绝佳综合方式! This Google Developers series with examples是使用MotionLayout的好方法。