1. 為什么要用ConstraintLayout
1.1 減少布局嵌套
1.2 對比RelativeLayout趁矾,更靈活,性能更高
1.3 ConstraintLayout可以按照比例約束控件位置和尺寸,能夠更好地適配屏幕大小不同的機(jī)型
2. ConstraintLayout的使用
添加依賴? implementation 'com.android.support.constraint:constraint-layout:1.1.3'
相對定位:
控件添加布局約束?app:layout_constraintLeft_toRightOf="@id/tv_title"等等
兩個高度不同的TextView癌刽,需要文字水平對齊時,可以使用app:layout_constraintBaseline_toBaselineOf
角度定位:
指的是可以用一個角度和一個距離來約束兩個空間的中心
app:layout_constraintCircle="@+id/tv_title_1"
app:layout_constraintCircleAngle="120"(角度)
app:layout_constraintCircleRadius="150dp"(距離)
邊距:
常用margin,當(dāng)前控件相對于約束控件的邊距周蹭,必須先設(shè)置約束位置趋艘,然后設(shè)置margin才能生效
goneMargin,主要用于約束控件可見性被設(shè)置為gone的時候使用的margin值凶朗,當(dāng)約束控件設(shè)置為gone的時候才生效的邊距
居中和偏移:
居中
android:layout_width="wrap_content"?
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
偏移瓷胧,取值0-1,0-最左邊棚愤,1-最右邊搓萧,0.5-居中
app:layout_constraintHorizontal_bias="0.5" 水平偏移
app:layout_constraintVertical_bias="0" 垂直偏移
寬高比:
當(dāng)寬或高至少有一個尺寸被設(shè)置為0dp時,可以通過屬性app:layout_constraintDimensionRatio設(shè)置寬高比
app:layout_constraintDimensionRatio="1:1"? 寬高1:1
在設(shè)置寬高比的值的時候宛畦,還可以在前面加W或H瘸洛,分別指定寬度或高度限制
app:layout_constraintDimensionRatio="H,2:3" 指的是 高:寬=2:3
app:layout_constraintDimensionRatio="W,2:3" 指的是? 寬:高=2:3
鏈:
3個TextView相互約束,兩端兩個TextView分別與parent約束次和,成為一條鏈
一條鏈的第一個控件是這條鏈的鏈頭反肋,我們可以在鏈頭中設(shè)置 layout_constraintHorizontal_chainStyle來改變整條鏈的樣式。chains提供了3種樣式踏施,分別是:
CHAIN_SPREAD —— 展開元素 (默認(rèn))石蔗;平均分布
CHAIN_SPREAD_INSIDE —— 展開元素,但鏈的兩端貼近parent读规;左右靠邊抓督,平均分布
CHAIN_PACKED —— 鏈的元素將被打包在一起。三個緊靠一起然后居中
如果把寬度都設(shè)為0dp束亏,這個時候可以在每個TextView中設(shè)置橫向權(quán)重app:layout_constraintHorizontal_weight(constraintVertical為縱向)來創(chuàng)建一個權(quán)重鏈
Barrier:
當(dāng)TextView1和TextView2寬度為wrap_content的時候铃在,TextView3居右邊時
app:barrierDirection為屏障所在的位置,可設(shè)置的值有:bottom碍遍、end定铜、left、right怕敬、start揣炕、top
app:constraint_referenced_ids為屏障引用的控件,可設(shè)置多個(用“,”隔開)
Group:
可以把多個控件歸為一組东跪,方便隱藏或顯示一組控件畸陡,把TextView1和TextView3歸為一組,同時控制
注意點:
全寬度虽填, 全高度也同理
?android:layout_width="0dp"?
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"