ConstraintLayout簡單學習

ConstraintLayout簡單學習與使用

“自從在去年的Google I/O 大會上發(fā)布 ConstraintLayout 以來偷卧,我們一直不斷改進該布局的穩(wěn)定性裆操,完善對布局編輯器的支持。我們還針對 ConstraintLayout 增加了一些新功能谬以,幫助您構(gòu)建不同類型的布局泛领,例如引入鏈和按比例設置大小拐揭。

除了這些功能之外,使用ConstraintLayout還可以獲得一項顯著的性能優(yōu)勢≌殷荩”Google 開發(fā)者計劃工程師 Takeshi Hagikura說蹈垢,這大概就是這個新布局的有點慷吊。

下面我們還是從最基礎(chǔ)的布局開始學習。

1.開始

開發(fā)工具:AndroidStudio3.0以上

為了要使用ConstraintLayout曹抬,我們需要在app/build.gradle文件中添加ConstraintLayout的依賴溉瓶,如下所示。

dependencies {

implementation?'com.android.support.constraint:constraint-layout:1.1.2'?}

2.布局

(1)來編寫一個Feed Item

看到這樣的布局谤民,大家條件反射應該就是使用RelativeLayout來做堰酿,當然了,本案例我們使用ConstraintLayout來寫:

? ? xmlns:app="http://schemas.android.com/apk/res-auto"

? ? xmlns:tools="http://schemas.android.com/tools"

? ? android:layout_width="match_parent"

? ? android:layout_height="match_parent"

? ? tools:context="aorise.com.constraintlayout.MainActivity">

? ? ? ? xmlns:android="http://schemas.android.com/apk/res/android"

? ? ? ? xmlns:app="http://schemas.android.com/apk/res-auto"

? ? ? ? xmlns:tools="http://schemas.android.com/tools"

? ? ? ? android:id="@+id/activity_main"

? ? ? ? android:layout_width="match_parent"

? ? ? ? android:layout_height="match_parent"

? ? ? ? android:background="#11ff0000"

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

? ? ? ? ? ? android:id="@+id/tv1"

? ? ? ? ? ? android:layout_width="140dp"

? ? ? ? ? ? android:layout_height="86dp"

? ? ? ? ? ? android:layout_marginLeft="12dp"

? ? ? ? ? ? android:layout_marginTop="12dp"

? ? ? ? ? ? android:background="#fd3"

? ? ? ? ? ? app:layout_constraintLeft_toLeftOf="parent"

? ? ? ? ? ? app:layout_constraintTop_toTopOf="parent"

? ? ? ? ? ? />

? ? ? ? ? ? android:id="@+id/tv2"

? ? ? ? ? ? android:layout_width="0dp"

? ? ? ? ? ? android:layout_height="wrap_content"

? ? ? ? ? ? android:layout_marginLeft="8dp"

? ? ? ? ? ? android:layout_marginRight="12dp"

? ? ? ? ? ? android:text="馬云:一年交稅170多億馬云:一年交稅170多億馬云:一年交稅170多億"

? ? ? ? ? ? android:textColor="#000000"

? ? ? ? ? ? android:textSize="16dp"

? ? ? ? ? ? app:layout_constraintLeft_toRightOf="@id/tv1"

? ? ? ? ? ? app:layout_constraintRight_toRightOf="parent"

? ? ? ? ? ? app:layout_constraintTop_toTopOf="@id/tv1" />

? ? ? ? ? ? android:layout_width="wrap_content"

? ? ? ? ? ? android:layout_height="wrap_content"

? ? ? ? ? ? android:layout_marginLeft="8dp"

? ? ? ? ? ? android:layout_marginTop="12dp"

? ? ? ? ? ? android:text="8分鐘前"

? ? ? ? ? ? android:textColor="#333"

? ? ? ? ? ? android:textSize="12dp"

? ? ? ? ? ? app:layout_constraintLeft_toRightOf="@id/tv1"

? ? ? ? ? ? app:layout_constraintBottom_toBottomOf="@id/tv1" />


看上面的布局张足,我們好像看到了幾個模式的屬性:

首先是tv1触创,有兩個沒見過的屬性:

app:layout_constraintLeft_toLeftOf="parent"

從字面上看,指的是讓該控件的左側(cè)與父布局對齊为牍,當我們希望控件A與控件B左側(cè)對齊時哼绑,就可以使用該屬性。

app:layout_constraintLeft_toLeftOf="@id/viewB"

類似的還有個相似的屬性為:

app:layout_constraintLeft_toRightOf

很好理解碉咆,即當前屬性的左側(cè)在誰的右側(cè)抖韩,當我們希望控件A在控件B的右側(cè)時,可以設置:

app:layout_constraintLeft_toRightOf="@id/viewB"

與之類似的還有幾個屬性:

layout_constraintRight_toLeftOf

layout_constraintRight_toRightOf

layout_constraintTop_toTopOf

layout_constraintTop_toBottomOf

layout_constraintBottom_toTopOf

layout_constraintBottom_toBottomOf

layout_constraintBaseline_toBaselineOf

屬性都形如layout_constraintXXX_toYYYOf,

這里我的理解疫铜,constraintXXX里的XXX代表是這個子控件自身的哪條邊(Left茂浮、Right、Top壳咕、Bottom席揽、Baseline),

而toYYYOf里的YYY代表的是和約束控件的哪條邊 發(fā)生約束 (取值同樣是 Left谓厘、Right幌羞、Top、Bottom庞呕、Baseline)新翎。

當XXX和YYY相反時,表示控件自身的XXX在約束控件的YYY的一側(cè)住练,

例如app:layout_constraintLeft_toRightOf="@id/button1" 地啰,表示的是控件自身的左側(cè)在button1的右側(cè)

從這里看來,功能和RL布局差不多讲逛,那為什么還要出這樣的布局呢亏吝?

3.添加一個Banner

我們現(xiàn)在以往在這個feed item頂部添加一個banner,寬度為占據(jù)整個屏幕盏混,寬高比為16:6蔚鸥。

這里尷尬了惜论,在之前的做法,很難在布局中設置寬高比止喷,一般我們都需要在代碼中顯示的去操作馆类,那么如果你用了ConstraintLayout,它就支持弹谁。

<TextView

? ? android:id="@+id/banner"

? ? android:layout_width="0dp"

? ? android:layout_height="0dp"

? ? android:background="#765"

? ? android:gravity="center"

? ? android:text="Banner"

? ? app:layout_constraintDimensionRatio="H,16:6"

? ? app:layout_constraintLeft_toLeftOf="parent"

? ? app:layout_constraintRight_toRightOf="parent" />

我們添加了一個banner乾巧,還記得我們剛才所說的么,不要使用match_parent了预愤,而是設置match_contraint沟于,即0,讓約束來控制布局寬高植康。

所以我們設置了寬旷太、高都是match_contraint,然后這兩個屬性:

app:layout_constraintLeft_toLeftOf="parent"

app:layout_constraintRight_toRightOf="parent"

讓我們的寬度充滿整個父布局销睁,在添加一個:

app:layout_constraintDimensionRatio="16:6"

4.增加幾個Tab

?<TextView

?android:id="@+id/tab1"

? ? android:layout_width="0dp"

? ? android:layout_height="30dp"

? ? android:background="#f67"

? ? android:gravity="center"

? ? android:text="Tab1"

? ? 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"

? ? android:background="#A67"

? ? android:gravity="center"

? ? android:text="Tab2"

? ? 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"

? ? android:background="#767"

? ? android:gravity="center"

? ? android:text="Tab3"

? ? app:layout_constraintBottom_toBottomOf="parent"

? ? app:layout_constraintLeft_toRightOf="@id/tab2"

? ? app:layout_constraintRight_toRightOf="parent" />

現(xiàn)在我們可以給每個tab設置一個屬性:

app:layout_constraintHorizontal_weight

看到這個名字供璧,應該就明白了吧,假設我們分別設置值為2榄攀,1嗜傅,1

目前差不多學到了這么多.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市檩赢,隨后出現(xiàn)的幾起案子吕嘀,更是在濱河造成了極大的恐慌,老刑警劉巖贞瞒,帶你破解...
    沈念sama閱讀 211,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件偶房,死亡現(xiàn)場離奇詭異,居然都是意外死亡军浆,警方通過查閱死者的電腦和手機棕洋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來乒融,“玉大人掰盘,你說我怎么就攤上這事≡藜荆” “怎么了愧捕?”我有些...
    開封第一講書人閱讀 157,435評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長申钩。 經(jīng)常有香客問我次绘,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,509評論 1 284
  • 正文 為了忘掉前任邮偎,我火速辦了婚禮管跺,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘禾进。我一直安慰自己豁跑,他們只是感情好,可當我...
    茶點故事閱讀 65,611評論 6 386
  • 文/花漫 我一把揭開白布命迈。 她就那樣靜靜地躺著贩绕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪壶愤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,837評論 1 290
  • 那天馏鹤,我揣著相機與錄音征椒,去河邊找鬼。 笑死湃累,一個胖子當著我的面吹牛勃救,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播治力,決...
    沈念sama閱讀 38,987評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼蒙秒,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了宵统?” 一聲冷哼從身側(cè)響起晕讲,我...
    開封第一講書人閱讀 37,730評論 0 267
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎马澈,沒想到半個月后瓢省,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,194評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡痊班,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,525評論 2 327
  • 正文 我和宋清朗相戀三年勤婚,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片涤伐。...
    茶點故事閱讀 38,664評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡馒胆,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出凝果,到底是詐尸還是另有隱情祝迂,我是刑警寧澤,帶...
    沈念sama閱讀 34,334評論 4 330
  • 正文 年R本政府宣布豆村,位于F島的核電站液兽,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜四啰,卻給世界環(huán)境...
    茶點故事閱讀 39,944評論 3 313
  • 文/蒙蒙 一宁玫、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧柑晒,春花似錦欧瘪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至涌庭,卻和暖如春芥被,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背坐榆。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評論 1 266
  • 我被黑心中介騙來泰國打工拴魄, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人席镀。 一個月前我還...
    沈念sama閱讀 46,389評論 2 360
  • 正文 我出身青樓匹中,卻偏偏與公主長得像,于是被迫代替她去往敵國和親豪诲。 傳聞我的和親對象是個殘疾皇子顶捷,可洞房花燭夜當晚...
    茶點故事閱讀 43,554評論 2 349