ConstraintLayout——約束布局全解析

前言

ConstraintLayout在android2.2以后出現(xiàn),現(xiàn)在studio升級到3.0以后,基本上都是xml文件默認出現(xiàn)的根布局了。

此篇文章的編寫參考以下鏈接:
Android新特性介紹,ConstraintLayout完全解析
哲♂學三幻神帶你學習ConstraintLayout(約束布局)
在此表示感謝!

今天講解的內(nèi)容包括:

  1. ConstraintLayout優(yōu)勢與缺點
  2. ConstraintLayout使用詳解
  3. ConstraintLayout布局xml屬性介紹
  4. 部分布局演示講解
一.ConstraintLayout優(yōu)勢與缺點

ConstraintLayout相對于RelativeLayout及其他布局來說,具備以下優(yōu)勢:

  1. 布局層級結(jié)構(gòu)比以前要少,不會嵌套很多,性能比RelativeLayout高
  2. 可以手動拖控件進行布局

ConstraintLayout缺點:

  1. 界面復(fù)雜的時候,拖動控件會影響整個布局
  2. 增加更多新的xml屬性,不支持gravity屬性,margin設(shè)置負值dp不起作用,每個控件都得有id
  3. ConstraintLayout 只能顯示一頁的內(nèi)容,超過部分是不會顯示的?。?!
    為此你可能需在外面再套一層: NestedScrollView 或 ScrollView!
二.ConstraintLayout使用詳解
2.1 配置

使用ConstraintLayout,需要在 app module的build.gradle中添加依賴,一般studio3.0的話基本已經(jīng)自動給你添加了。

dependencies {
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
}
2.2 給布局添加控件

只需要將控件拖到布局中即可,如下圖:


1.gif

這里我只是將控件放到布局中,并未添加任何約束,預(yù)覽中顯示的控件位置并非實際運行效果,其實一個控件在未添加任何約束的時候,是默認顯示在界面左上角的。

控件的約束包括豎直和水平兩個方向,由控件四周顯示的四個圓圈來控制


image.png

我們可以將約束添加到ConstraintLayout上,也可以添加到另一個控件上,下面來具體介紹。

2.3 將控件的約束添加到ConstraintLayout上

舉例,我們要將一個button放到ConstraintLayout右上角,我們可以這樣操作:


2.gif

這里大家可能會注意到button與布局右上角有一定間隙,這是因為設(shè)置了控件默認margin,若要使無縫貼合右上角,可以將默認margin設(shè)置為0,再進行控件的拖動,如下:


3.gif

大家可以看到,一開始設(shè)置的默認margin是8dp,然后我設(shè)置成0dp,最后將控件拖曳到右上角

如果要將控件放到ConstraintLayout布局正中央,可以這樣操作:


4.gif
2.4 將控件的約束添加到另一個控件上

例如我要將控件A放置在控件B的正下方,并距B的top處108dp,可以這樣操作:


5.gif

大家可以看出控件A依賴控件B后,在移動控件B的時候,控件A也是跟著動的。

2.5 基線約束

有時我們會涉及到要求輸入框文字和TextView顯示的文字底部對齊,只需要點擊editText控件下方的“ab”圖標,然后牽引到TextView的底部即可,具體操作如下:


4.gif

添加約束的基本使用已經(jīng)介紹完畢,現(xiàn)在講講刪除約束。刪除約束包括刪除單個控件的單個約束,刪除單個控件的所有約束和刪除ConstraintLayout布局中所有控件的所有約束

2.6 刪除單個控件的單個約束

例如我要刪除控件A在控件B上方距控件B 108dp距離的這個約束,只需要將鼠標放到控件A正下方的圓圈上(此時對應(yīng)圓圈會變紅),然后左鍵單擊圓圈,即取消了A距離B 108dp的這個約束,操作如下:


6.gif
2.7 刪除單個控件的所有約束

以刪除控件A上所有約束為例,單擊控件A,會發(fā)現(xiàn)A左下角有兩個圖標,“X”和“ab”,點擊“X”圖標即刪除A上所有約束,操作如下:


7.gif
2.8 刪除ConstraintLayout布局中所有控件的所有約束

點擊布局界面中的
image.png

按鈕可以刪除ConstraintLayout中所有控件的所有約束,操作如下:


8.gif
2.9 Inspector介紹

在進行布局的時候,我們還要關(guān)注這個界面:


image.png

下面的部分都是些基本屬性的使用,這里就不做介紹了,下面重點講講上圖中的這部分:


image.png

圖中有一個縱向進度條和一個橫向進度條,當然有時他們會都不出現(xiàn)或者只出現(xiàn)一個,那是因為你沒有設(shè)置對應(yīng)控件的margin。其中橫縱拉動條是設(shè)置控件位于布局中的橫向和縱向位置的百分比,操作如下:
1.gif
2.10 給控件設(shè)置margin

直接在Inspector的對應(yīng)上下左右輸入margin值,單位dp,然后點擊回車,就能設(shè)置對應(yīng)位置的margin值,操作如下:


2.gif
2.11 Inspector中的wrap content,固定值與any size

在Inspector的方塊中可以設(shè)置控件的模式,圖標如下:

  1. “>>>>” 表示 wrap content
  2. “|---------|”表示固定值
  3. image.png

    ”表示any size,它有點類似于match parent,但和match parent并不一樣,是屬于ConstraintLayout中特有的一種大小控制方式,

然后我們將鼠標放置到“>>>>”上進行左鍵單擊的時候,三中模式就會來回切換
下面我們來重點講解一下anySize模式

單獨操作控件A時,anySize效果是這樣的:


3.gif

可以看到,其實是可以實現(xiàn)控件撐滿全屏的(如果屏幕中就一個控件)

然后看看兩個控件存在依賴的時候,anySize的表現(xiàn):


4.gif

可以看到此時anySize與match parent的不同,anySize是占據(jù)這個控件之外的所有空間

2.12 Guidelines講解

Guidelines是通常用來輔助做百分比布局的,也分為橫向和縱向
下面以添加縱向Guidelines為例
Guidelines的添加操作如下:


1.gif

或者這樣添加:


2.gif

Guidelines默認是設(shè)置dp的,要切換成百分比布局,可以點擊上面的“三角”符號,當出現(xiàn)百分號的時候,證明是百分比布局了,下面以設(shè)置button
占屏幕寬度20%為例,操作如下:
3.gif

Guidelines設(shè)置占屏幕高度的百分比類似,當點擊Guidelines的“三角”切換百分比失效的時候,大家可以在xml中用代碼設(shè)置百分比,類似如下:
    <android.support.constraint.Guideline
        android:id="@+id/guideline5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintGuide_percent="0.2" />

app:layout_constraintGuide_percent="0.2"就是設(shè)置百分比的屬性,記得值應(yīng)該為小數(shù)

2.13 Chains(鏈)

有時需要連續(xù)調(diào)節(jié)幾個相連控件之間的關(guān)系,則需要用到Chains,Chains有三種模式,點擊控件右下角的“鏈條”圖標,能切換不同的模式,下面就Chains的整體操作做以演示:


5.gif

其中多選控件的時候,需要按住shift并單擊控件,然后添加鏈的時候要選中控件,右鍵,選擇chain

2.14 自動約束

這里請參考Android新特性介紹,ConstraintLayout完全解析

三.ConstraintLayout布局xml屬性介紹

請參考哲♂學三幻神帶你學習ConstraintLayout(約束布局)中關(guān)于屬性的介紹

四.部分布局演示講解

這里主要講一個基本標題欄布局,演示如下:


6.gif

然后就是一般的類似一個控件在另一個控件上壓一半的布局,這個一般在個人設(shè)置的圖像布局部分會出現(xiàn),下面做一個類似布局的操作演示:


7.gif

ok,今天關(guān)于ConstraintLayout的布局就講到這里了,謝謝誒。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容