美文网首页
Android全新布局Constraintlayout初探

Android全新布局Constraintlayout初探

作者: Noddy | 来源:发表于2016-06-08 10:49 被阅读2615次

    前言:2016 Google I/O上,google带来了全新的布局方式:约束布局ConstraintLayout,我也在最近试用了一下这种全新的布局方式

    ConstraintLayout是什么

    ConstraintLayout可以说是相对布局RelativeLayout的升级版,它允许我们在layout上设计子控件与子控件之间的位置关系。或许你会说,这不就是RelativeLayout之前一直在干的事情吗?
    但我们用RelativeLayout时,经常会出现多层布局嵌套,而ConstraintLayout往往只需要一层就可以满足需求,从而提高软件布局渲染的性能。

    例如:

    相对布局RelativeLayout允许我们用以下4个属性来设置view与view之间的位置关系

    • layout_toRightOf
    • layout_toLeftOf
    • layout_toTopOf
    • layout_toBottomOf

    然而,约束布局ConstraintLayout带来了众多属性

    • layout_constraintTop_toTopOf
    • layout_constraintTop_toBottomOf
    • layout_constraintBottom_toTopOf
    • layout_constraintBottom_toBottomOf
    • layout_constraintLeft_toTopOf
    • layout_constraintLeft_toBottomOf
    • layout_constraintLeft_toLeftOf
    • layout_constraintLeft_toRightOf
    • layout_constraintRight_toTopOf
    • layout_constraintRight_toBottomOf
    • layout_constraintRight_toLeftOf
    • layout_constraintRight_toRightOf
    • ......

    这么多属性,中间的constraintXXX又是什么意思呢?不用想了,直接新建一个项目,一探究竟就知道了!

    怎样使用ConstraintLayout

    1. 下载Android Studio 2.2 Preview2(2.1正式版没有该功能,必须安装最新的版本)
      http://tools.android.com/download/studio/canary/latest
    2. 新建项目,在build.gradle中添加
    dependencies 
    {
        compile 'com.android.support.constraint:constraint-layout:1.0.0-alpha1'
    }
    

    ok,切换到布局的Design页面,拖动一个ImageView到布局里面,如下图:

    init.png

    (图)分了两部分,左边为设计预览,右边为蓝图模式

    点击一下左边视图的imageview,会出现4边各有一个小圆和4角各有一个小正方形:小圆手柄(调整手柄)可以调节控件的大小,而正方形手柄(约束手柄)可以调整控件的位置。尝试把4个约束手柄分别拉到界面的边缘,看看有什么情况出现:

    center_layout.gif

    Android Studio自动把该imageview居中,来看看xml布局代码:

    <ImageView
                android:src="@drawable/abc_ic_menu_cut_material"
                android:layout_width="91dp"
                android:layout_height="59dp"
                android:id="@+id/imageView"
                android:layout_marginLeft="16dp"
                android:layout_marginStart="16dp"
                android:layout_marginTop="16dp"
                android:layout_marginRight="16dp"
                android:layout_marginEnd="16dp"
                android:layout_marginBottom="16dp"
                app:layout_constraintLeft_toLeftOf="@+id/activity_constraint_layout"
                app:layout_constraintTop_toTopOf="@+id/activity_constraint_layout"
                app:layout_constraintRight_toRightOf="@+id/activity_constraint_layout"
                app:layout_constraintBottom_toBottomOf="@+id/activity_constraint_layout"
                />
    

    可以看到,自动添加了4个ConstraintLayout的属性。还是不太懂,我们再添加一个TextView来试试看:

    under_layout.gif

    把TextView放到ImageView下面,会自动把TextView的左右约束与ImageView的左右约束连接起来。我再把TextView的顶部约束和ImageView的底部约束两者连接起来,看看xml代码发生了怎样的变化:

    <TextView
                android:text="TextView"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" 
                android:id="@+id/textView"
                android:layout_marginTop="8dp"
                app:layout_constraintLeft_toLeftOf="@+id/imageView" 
                app:layout_constraintTop_toBottomOf="@+id/imageView"
                app:layout_constraintRight_toRightOf="@+id/imageView"
                />
    

    多了3个ConstraintLayout的属性。TextView显示在ImageView的正下方。如果我再添加一个layout_constraintBottom_toTopOf属性呢(也就是两者的顶部约束连接)?

    噢!TextView叠加在ImageView的上面。

    原来,constraintXXX的意思是XXX约束在另一个view的什么位置。

    例如控件A定义了app:layout_constraintLeft_toLeftOf="@+id/控件B"

    说明控件A的左边与控件B的左边位置要一致。

    再定义控件A的app:layout_constraintBottom_toTopOf="@+id/控件B"

    说明控件A的底部与控件B的顶部位置要一致,言下之意就是A出现在B的上方了。

    结合上面两个属性,A就会出现在B的左上方的位置上。

    试试只添加控件A的app:layout_constraintLeft_toLeftOf="@+id/控件B"和app:layout_constraintTop_toTopOf="@+id/imageView",看看是不是控件A叠加在控件B的上面,有点FrameLayout的味道吧!!!

    其实多动手拖拉一下,就会明白这个全新布局的用法了。对于精细布局,还是蛮有效果的呢!!!

    相关文章

      网友评论

          本文标题:Android全新布局Constraintlayout初探

          本文链接:https://www.haomeiwen.com/subject/miljdttx.html