Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android ConstraintLayout vs Coordinator布局?_Android_Material Design_Android Constraintlayout_Coordinator Layout - Fatal编程技术网

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参数;协调和动画工具栏,工厂等;用于保存视图。