ConstraintLayout最新版屬性詳細介紹

簡介

public class ConstraintLayout extends ViewGroup

當(dāng)前最新版本 :
com.android.support.constraint:constraint-layout:1.1.0-beta6
com.android.support.constraint:constraint-layout:1.0.2

| [java.lang.Object](http://developer.android.google.cn/reference/java/lang/Object.html) |
|    ? | [android.view.View](http://developer.android.google.cn/reference/android/view/View.html) |
|   |    ? | [android.view.ViewGroup](http://developer.android.google.cn/reference/android/view/ViewGroup.html) |
|   |   |    ? | android.support.constraint.ConstraintLayout |

一句話簡介

ConstraintLayout是一個允許您以靈活的方式定位和調(diào)整窗口小部件的大小的ViewGroup。

支持的約束類型

開發(fā)者指南

Relative Positioning (使用基本同RelativeLayout)

相對布局是ConstraintLayout基本構(gòu)建模塊之一,允許小部件間在水平和垂直方向相對定位

  • 水平方向支持屬性 :left right start end
  • 垂直方向支持屬性 :top bottom baseLine
image
常用屬性
  • 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/test" 為例膝昆。
constraintLeft 代表當(dāng)前view的左側(cè),
toLeftOf 代表目標(biāo)view,
"@id/test" 代表目標(biāo)view的id儿普。
整體代表當(dāng)前view的左側(cè)與目標(biāo)view的左側(cè)對齊

Margins

基本使用方式跟RelativeLayout相同

屬性
  • android:layout_marginStart
  • android:layout_marginEnd
  • android:layout_marginLeft
  • android:layout_marginTop
  • android:layout_marginRight
  • android:layout_marginBottom

以 android:layout_marginTop = "20dp" 為例。代表當(dāng)前view上方距約束目標(biāo)20dp的距離

除了以上屬性掷倔,還提供了當(dāng)約束目標(biāo)處在gone狀態(tài)時的一些屬性

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

以 layout_goneMarginTop = "20dp" 為例眉孩。代表當(dāng)前view上方約束目標(biāo)處在gone的狀態(tài)時,距離上方20dp的距離勒葱,具體可以自己寫個view體驗一下效果

Centering positioning

在ConstraintLayout里怎么居中呢?

<TextView
        android:id="@+id/ccc"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toTopOf="@id/bbb"     (ccc底部和bbb頂部對齊)
        app:layout_constraintLeft_toRightOf="@id/aaa"     (ccc左側(cè)和aaa右側(cè)對齊)
        app:layout_constraintRight_toLeftOf="@id/bbb"    (ccc右側(cè)和bbb左側(cè)對齊)
        app:layout_constraintTop_toBottomOf="@id/aaa"     (ccc頂部和aaa底部對齊)
         />

如圖1所示:上方代碼實現(xiàn)了ccc相對aaa和bbb的居中
[圖片上傳失敗...(image-3d4914-1523169847355)]

bias
    <TextView
        android:id="@+id/ccc"
        android:text="ccc"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintVertical_bias="0.9"
        app:layout_constraintHorizontal_bias="0.2"
        app:layout_constraintBottom_toTopOf="@id/bbb"
        app:layout_constraintLeft_toRightOf="@id/aaa"
        app:layout_constraintRight_toLeftOf="@id/bbb"
        app:layout_constraintTop_toBottomOf="@id/aaa" />

bias屬性可以控制權(quán)重則可達到下圖效果
在上方代碼加入

app:layout_constraintVertical_bias="0.9"
app:layout_constraintHorizontal_bias="0.2"
圖2

Circular positioning (1.1.x版本支持)

該定位方式支持以約束view為圓心勺像,提供半徑以及角度來定位當(dāng)前view
app:layout_constraintCircle 設(shè)置約束view
app:layout_constraintCircleRadius 距離的半徑
app:layout_constraintCircleAngle 偏差角度

<TextView
        android:id="@+id/ddd"
        android:text="ddd"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintCircle="@id/ccc"
        app:layout_constraintCircleAngle="60"
        app:layout_constraintCircleRadius="100dp" />
圖3

圖4

圖5

Visibility behavior

visibility屬性

  • visible (view可見)
  • gone (view不可見障贸,且不占據(jù)布局空間)
  • invisible (view不可見,但占據(jù)布局空間)

ConstraintLayout提供了相對友好的布局方式(即當(dāng)目標(biāo)約束處在gone狀態(tài)下時的布局調(diào)整)

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

具體使用見Margins相關(guān)介紹

Dimensions constraints

尺寸約束吟宦,支持屬性:
  • android:minWidth 設(shè)置view最小寬度
  • android:minHeight 設(shè)置view最小高度
  • android:maxWidth 設(shè)置view最大寬度
  • android:maxHeight 設(shè)置view最大高度

當(dāng)view設(shè)置為wrap_content時,以上屬性方可使用涩维。

Widgets dimension constraints

view的寬(android:layout_width)高(android:layout_height)有以下幾種方式設(shè)置

  • 具體的值(例如:100dp)
  • wrap_content
  • 0dp

當(dāng)使用warp_content時殃姓,還可以使用以下屬性增加約束限制(1.1.x版本支持):

  • app:layout_constrainedWidth=”true|false”
  • app:layout_constrainedHeight=”true|false”

當(dāng)使用0dp時,可以使用以前屬性:

  • layout_constraintWidth_min 和 layout_constraintHeight_min 設(shè)置view最小值
  • layout_constraintWidth_max 和 layout_constraintHeight_max 設(shè)置view最大值
  • layout_constraintWidth_percent 和 layout_constraintHeight_percent 設(shè)置view占 parent的百分比值

tip:
min和max可以設(shè)置為wrap瓦阐,此效果和設(shè)置wrap_content效果一樣
若要使用 layout_constraintWidth_percent 和 layout_constraintHeight_percent 需要滿足以下條件:

  • 設(shè)置0dp
  • app:layout_constraintWidth_default="percent" 或 app:layout_constraintHeight_default="percent"
    (在版本1.1.0-beta1和1.1.0-beta2必須設(shè)置蜗侈,后續(xù)版本不需設(shè)置)
  • 值必須在0-1之間
Ratio

該屬性還可設(shè)置view寬高比,前提寬和高屬性至少有一個為0dp

android:layout_width="wrap_content"
android:layout_height="0dp"
app:layout_constraintDimensionRatio="1:5"
圖6

Chains

Creating a chain

[圖片上傳失敗...(image-bb598f-1523169847355)]

上圖A和B互為彼此的Chain

Chain heads
圖8
Margins in chains

在chains中允許使用margin屬性睡蟋,并會占據(jù)空間

Chain Style
圖9

通過 layout_constraintHorizontal_chainStyle / layout_constraintVertical_chainStyle 設(shè)置

  • CHAIN_SPREAD 默認樣式
  • CHAIN_SPREAD_INSIDE
  • CHAIN_PACKED
Weighted chains

可以通過 layout_constraintVertical_weight 或者 layout_constraintHorizontal_weight 設(shè)置權(quán)重


圖10
 <TextView
        android:id="@+id/aaa"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:text="aaa"
        android:background="@color/colorAccent"
        app:layout_constraintHorizontal_weight="4"
        app:layout_constraintHorizontal_chainStyle="spread_inside"
        app:layout_constraintEnd_toStartOf="@id/bbb"
        app:layout_constraintStart_toStartOf="parent" />

    <TextView
        android:id="@+id/bbb"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:text="aaa"
        android:background="@color/colorPrimary"
        app:layout_constraintHorizontal_weight="2"
        app:layout_constraintEnd_toStartOf="@id/ccc"
        app:layout_constraintStart_toEndOf="@id/aaa" />

    <TextView
        android:id="@+id/ccc"
        android:layout_width="0dp"
        android:background="@color/colorAccent"
        android:layout_height="wrap_content"
        app:layout_constraintHorizontal_weight="5"
        android:text="aaa"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@id/bbb" />
Margins and chains(1.1.x版本支持)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末踏幻,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子戳杀,更是在濱河造成了極大的恐慌该面,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,843評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件信卡,死亡現(xiàn)場離奇詭異隔缀,居然都是意外死亡,警方通過查閱死者的電腦和手機傍菇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評論 3 392
  • 文/潘曉璐 我一進店門猾瘸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人丢习,你說我怎么就攤上這事牵触。” “怎么了咐低?”我有些...
    開封第一講書人閱讀 163,187評論 0 353
  • 文/不壞的土叔 我叫張陵揽思,是天一觀的道長。 經(jīng)常有香客問我渊鞋,道長绰更,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,264評論 1 292
  • 正文 為了忘掉前任锡宋,我火速辦了婚禮儡湾,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘执俩。我一直安慰自己徐钠,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,289評論 6 390
  • 文/花漫 我一把揭開白布役首。 她就那樣靜靜地躺著尝丐,像睡著了一般显拜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上爹袁,一...
    開封第一講書人閱讀 51,231評論 1 299
  • 那天远荠,我揣著相機與錄音,去河邊找鬼失息。 笑死譬淳,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的盹兢。 我是一名探鬼主播邻梆,決...
    沈念sama閱讀 40,116評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼绎秒!你這毒婦竟也來了浦妄?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,945評論 0 275
  • 序言:老撾萬榮一對情侶失蹤见芹,失蹤者是張志新(化名)和其女友劉穎剂娄,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體辆童,經(jīng)...
    沈念sama閱讀 45,367評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡宜咒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,581評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了把鉴。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片故黑。...
    茶點故事閱讀 39,754評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖庭砍,靈堂內(nèi)的尸體忽然破棺而出场晶,到底是詐尸還是另有隱情,我是刑警寧澤怠缸,帶...
    沈念sama閱讀 35,458評論 5 344
  • 正文 年R本政府宣布诗轻,位于F島的核電站,受9級特大地震影響揭北,放射性物質(zhì)發(fā)生泄漏扳炬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,068評論 3 327
  • 文/蒙蒙 一搔体、第九天 我趴在偏房一處隱蔽的房頂上張望恨樟。 院中可真熱鬧,春花似錦疚俱、人聲如沸劝术。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽养晋。三九已至衬吆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間绳泉,已是汗流浹背逊抡。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留零酪,地道東北人秦忿。 一個月前我還...
    沈念sama閱讀 47,797評論 2 369
  • 正文 我出身青樓,卻偏偏與公主長得像蛾娶,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子潜秋,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,654評論 2 354

推薦閱讀更多精彩內(nèi)容