美文网首页
一起学习ConstraintLayout

一起学习ConstraintLayout

作者: Dane_404 | 来源:发表于2019-03-19 23:07 被阅读0次

    之前和朋友聊到ConstraintLayout,他说用了之后你就不想用RelativeLayout了,今天抽空对着官方文档学一遍。

    1、Relative positioning

    1、ConstraintLayout提供了如下位置相关属性

    • layout_constraintLeft_toLeftOf
    • layout_constraintLeft_toRightOf
    • layout_constraintRight_toLeftOf
    • layout_constraintRight_toRightOf
    • layout_constraintTop_toTopOf
    • layout_constraintTop_toBottomOf
    • layout_constraintBottom_toTopOf
    • layout_constraintBottom_toBottomOf
    • layout_constraintBaseline_toBaselineOf
    • layout_constraintStart_toEndOf
    • layout_constraintStart_toStartOf
    • layout_constraintEnd_toStartOf
    • layout_constraintEnd_toEndOf
      见名知意,比如 layout_constraintLeft_toLeftOf=“@+id/xxx”,表示约束View的左边在id为xxx的view的左边。

    2、layout_constraintLeft_toLeftOf=“@+id/xxx”可以不指定id,可以为layout_constraintLeft_toLeftOf=“parent”,这样可以做居中效果,如下:

    • 水平居中

      <android.support.constraint.ConstraintLayout ...>
             <Button android:id="@+id/button" ...
                 app:layout_constraintLeft_toLeftOf="parent"
                 app:layout_constraintRight_toRightOf="parent"/>
         </>
      
    • 垂直居中

      <android.support.constraint.ConstraintLayout ...>
             <Button android:id="@+id/button" ...
                 app:layout_constraintTop_toTopOf="parent"
                 app:layout_constraintBottom_toBottomOf="parent"/>
         </>
      
    • 整体居中就四个全加上

    2、layout_goneMargin

    1、ConstraintLayout提供如下属性,用于比如View B 约束在View A右边,假如有个需求当A Gone的时候,B需要个marge left,这时候使用layout_goneMarginLeft即可。

    • layout_goneMarginStart
    • layout_goneMarginEnd
    • layout_goneMarginLeft
    • layout_goneMarginTop
    • layout_goneMarginRight
    • layout_goneMarginBottom

    3、Bias

    1、ConstraintLayout提供如下属性,类型百分比

    • layout_constraintHorizontal_bias
    • layout_constraintVertical_bias

    2、示例及效果

    <android.support.constraint.ConstraintLayout ...>
             <Button android:id="@+id/button" ...
                 app:layout_constraintHorizontal_bias="0.3"
                 app:layout_constraintLeft_toLeftOf="parent"
                 app:layout_constraintRight_toRightOf="parent/>
         </>
    
    TIM截图20171220143404.png

    4、Circular positioning

    1、ConstraintLayout提供如下属性,用于View B 在View A 某个角度半径为xx的位置上。

    • layout_constraintCircle
    • layout_constraintCircleRadius
    • layout_constraintCircleAngle

    2、示例及效果

    <Button android:id="@+id/buttonA" ... />
    <Button android:id="@+id/buttonB" ...
      app:layout_constraintCircle="@+id/buttonA"
      app:layout_constraintCircleRadius="100dp"
      app:layout_constraintCircleAngle="45" />
    
    TIM截图20171220143828.png

    5、Visibility behavior

    1、通常我们使用RelativeLayout,View B 处于 View A 右边,当A Gone的时候,B会失去相对关系,而ConstraintLayout则不会,看下面效果图,A处于Gone状态,B的约束效果还是作用。


    TIM截图20171220144909.png

    6、Ratio

    1、ConstraintLayout提供比例属性

    • 高根据宽的值按比例显示

      <TextView
        android:layout_width="wrap_content"
        android:layout_height="0dp"
        android:background="@android:color/darker_gray"
        android:text="Hello World!"
        app:layout_constraintDimensionRatio="1:1"
        app:layout_constraintTop_toTopOf="parent"
        />
      
    TIM截图20171220153731.png
    • 宽根据高的值按比例显示

      <TextView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:background="@android:color/darker_gray"
        android:text="Hello World!"
        app:layout_constraintDimensionRatio="1:1"
        app:layout_constraintTop_toTopOf="parent"
        />
      
    TIM截图20171220153844.png

    2、若宽和高都为0dp,app:layout_constraintDimensionRatio分两种情况,H表示高宽比,W表示宽高比,前提条件要0dp和 center on parent

     <Button android:layout_width="0dp"
                   android:layout_height="0dp"
                   app:layout_constraintDimensionRatio="H,16:9"
                   app:layout_constraintBottom_toBottomOf="parent"
                   app:layout_constraintTop_toTopOf="parent"/>
    

    7、Chains

    1、Chain Style

    • 第一个TextView为head,它的layout_constraintHorizontal_chainStyle决定了链风格

      <TextView
        android:text="11111"
        android:background="@color/colorPrimary"
        android:layout_width="wrap_content"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toLeftOf="@+id/tv2"
        app:layout_constraintHorizontal_chainStyle="spread"
        android:layout_height="wrap_content"
        android:id="@+id/tv1"
      />
      
      
        <TextView
            android:text="2222"
            android:background="@color/colorAccent"
            app:layout_constraintLeft_toRightOf="@+id/tv1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/tv2"
            app:layout_constraintRight_toLeftOf="@+id/tv3"
            />
      
        <TextView
            android:text="3333"
            android:background="@android:color/darker_gray"
            android:layout_width="wrap_content"
            app:layout_constraintRight_toRightOf="parent"
            android:layout_height="wrap_content"
           android:id="@+id/tv3"
            app:layout_constraintLeft_toRightOf="@+id/tv2"/>
      
    TIM截图20171220170911.png
    • 默认风格是spread,其他风格效果


      TIM截图20171220171138.png

    2、Weighted chains

    • 如上面例子,layout_width或layout_height改为0dp,使用layout_constraintHorizontal_weight或layout_constraintVertical_weight即可。

    相关文章

      网友评论

          本文标题:一起学习ConstraintLayout

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