布局性能优化之ConstraintLayout布局

布局优化--减少布局嵌套层级

当布局嵌套深入比较深的时候,往往会伴随着一些性能问题。所以很多时候我们建议使用RelativeLayout或者GridLayout来简化掉布局的深度。

而对于简化布局深度,ConstraintLayout几乎可以做到极致,接下来我们通过实例来尽可能将所有常见的属性一步步的介绍清楚。

constriantLayout布局引入

首先需要引入我们的ConstraintLayout,在build.gradle中加入:

compile'com.android.support.constraint:constraint-layout:1.0.2'

1,app:layout_constraintLeft_toLeftOf="parent"

      app:layout_constraintLeft_toLeftOf="@id/viewB"

      layout_constraintLeft_toLeftOf表示和什么左边对齐

2,app:layout_constraintLeft_toRightOf="@id/viewB"

      layout_constraintLeft_toRightOf表示当前控件的左侧在那个控件的右侧

3,与之类似的还有几个属性:

      layout_constraintRight_toLeftOf

      layout_constraintRight_toRightOf 

      layout_constraintTop_toTopOfth

      layout_constraintTop_toBottomOf

      layout_constraintBottom_toTopOf

      layout_constraintBottom_toBottomOf

      layout_constraintBaseline_toBaselineOf

4,与RelativeLayout的区别:

      当一个控件的两端都加入的约束的时候,需要设置layout_width = 0;

      在COnstraintLayout布局中是不存在match_parent属性的,

5,设置宽高比

      android:layout_width="0dp"

      android:layout_height="0dp"

      app:layout_constraintLeft_toLeftOf="parent"

      app:layout_constraintRight_toRightOf="parent"

      app:layout_constraintDimensionRatio="16:6"

      这个宽高比属性,还支持这样的写法:

      app:layout_constraintDimensionRatio="W,16:6"

      app:layout_constraintDimensionRatio="H,16:6"

6,增加几个Tab

      现在我们希望在底部增加3个tab,均分。是不是想到了LinearLayout和weight。

      使用ConstraintLayout实现如下

      <TextView 

         android:id="@+id/tab1"

         android:layout_width="0dp"

         android:layout_height="30dp"

         app:layout_constraintBottom_toBottomOf="parent"

         app:layout_constraintLeft_toLeftOf="parent"

         app:layout_constraintRight_toLeftOf="@+id/tab2"/> 

      <TextView

         android:id="@+id/tab2"

         android:layout_width="0dp"

         android:layout_height="30dp"

         app:layout_constraintBottom_toBottomOf="parent"

         app:layout_constraintLeft_toRightOf="@id/tab1"

         app:layout_constraintRight_toLeftOf="@+id/tab3"/> 

      <TextView

         android:id="@+id/tab3"

         android:layout_width="0dp"

         android:layout_height="30dp"

         app:layout_constraintBottom_toBottomOf="parent"

         app:layout_constraintLeft_toRightOf="@id/tab2"

         app:layout_constraintRight_toRightOf="parent"/>

        我们看横向的依赖,3个tab两两设置了约束(即你在我们的左边,我在你的右边),最外层的设置了parent约束;再加上我们把宽度都设置为  

        了match_constraint,so

1.png

app:layout_constraintHorizontal_weight比重属性设置:

假设我们分别设置值为2,1,1。

2.png

layout_constraintHorizontal_chainStyle设置展示效果:

chainStyle=”spread”+ 宽度为0:

3.png

chainStyle=”spread”  + 宽度非0:

4.png

chainStyle=”spread_inside” + 宽度非0

5.png

chainStyle=”packed”+ 宽度非0

6.png

7,一个很常见的功能,我们现在希望在右下角增加一个浮动按钮。

     <TextView

        android:layout_width="60dp"

        android:layout_height="60dp"

        android:background="#612"

        app:layout_constraintVertical_bias="0.9"

        app:layout_constraintHorizontal_bias="0.9"

        app:layout_constraintBottom_toBottomOf="parent"

        app:layout_constraintLeft_toLeftOf="parent"

        app:layout_constraintRight_toRightOf="parent"

        app:layout_constraintTop_toTopOf="parent"/> 

7.png

         layout_constraintHorizontal_bias

         即设置上下两侧间隙比例分别为90%与10%,设置左右两侧间隙比例分别为90%与10%。

         android.support.constraint.Guideline 该类比较简单,主要用于辅助布局,即类似为辅助线,横向的、纵向的。该布局是不会显示到界面上的。

         android:orientation取值为”vertical”和”horizontal”.

         除此以外,还差个属性,决定该辅助线的位置:

         layout_constraintGuide_begin

         layout_constraintGuide_end

         layout_constraintGuide_percent

         可以通过上面3个属性其中之一来确定属性值位置。

         begin=30dp,即可认为距离顶部30dp的地方有个辅助线,根据orientation来决定是横向还是纵向。

         end=30dp,即为距离底部。 

         percent=0.8即为距离顶部80%。

   <android.support.constraint.ConstraintLayout

        ...

        tools:context="com.zhy.constrantlayout_learn.MainActivity">

    <android.support.constraint.Guideline

        android:id="@+id/guideline_h"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:orientation="horizontal"

        app:layout_constraintGuide_percent="0.8" />

    <android.support.constraint.Guideline

        android:id="@+id/guideline_w"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:orientation="vertical"

        app:layout_constraintGuide_percent="0.8" />

    <TextView

        android:layout_width="60dp"

        android:layout_height="60dp"

        android:background="#612"

        app:layout_constraintLeft_toRightOf="@id/guideline_w"

        app:layout_constraintTop_toBottomOf="@id/guideline_h" />

</....>

8.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343