ConstraintLayout學習筆記

android ConstraintLayout 實現(xiàn)一個簡單登錄界面布局

android studio新建工程已經(jīng)使用ConstraintLayout來作為默認布局了却舀。作為一個android小菜鳥饭聚,這兩天學習了一下新的布局浙垫。

ConstraintLayout是基于約束的布局谨垃,有點類似ios的autolayout。下面我們用一個很簡單的登錄界面來學習一下android的ConstraintLayout。


這是一個簡單的登錄界面敦捧。既然ConstraintLayout是基于約束的布局,那么我們在布局之前就要考慮一下布局界面需要哪些約束碰镜。以上圖的登錄界面為例兢卵,基本的約束有用戶名標簽和密碼標簽右對齊,用戶名輸入框和密碼輸入對齊绪颖,用戶名標簽和用戶名輸入框基線對齊秽荤,密碼標簽和密碼輸入框基線對齊,登錄和注冊按鈕水平居中對其柠横。

下面我們介紹一下如何在xml中配置這些約束窃款。首先我們設置一條參考線(GuideLine)用來作為布局的頂部參考,對應右側藍圖中的虛線

<pre>

<android.support.constraint.Guideline

android:layout_width="wrap_content"

android:layout_height="wrap_content"

app:layout_constraintGuide_percent="0.15"

android:id="@+id/hLine1"

android:orientation="horizontal"

/>

</pre>

我們創(chuàng)建了一條水平參考線滓鸠,距離頂部距離為0.15倍(也可以使用dp)雁乡。

接下來我們配置一下用戶名標簽的約束。左邊和父視圖對齊糜俗,右邊和輸入框對齊踱稍,上邊和我們添加的水平參考線對其曲饱,然后我們調(diào)整了一下各個方向的margin。

<pre>

<TextView

android:id="@+id/userNameText"

android:layout_width="100dp"

android:layout_height="0dp"

android:layout_marginStart="20dp"

android:layout_marginTop="30dp"

android:text="@string/userName"

android:gravity="end"

app:layout_constraintLeft_toLeftOf="parent"

app:layout_constraintRight_toLeftOf="@+id/userNameEdit"

app:layout_constraintTop_toTopOf="@+id/hLine1"

/>

</pre>

用戶輸入框的約束和用戶名標簽的類似珠月,只是添加了一種新的基線對齊約束扩淀。

<pre>

<EditText

android:id="@+id/userNameEdit"

android:layout_width="0dp"

android:layout_height="wrap_content"

android:layout_marginStart="20dp"

android:layout_marginEnd="20dp"

app:layout_constraintRight_toRightOf="parent"

app:layout_constraintLeft_toRightOf="@+id/userNameText"

app:layout_constraintTop_toTopOf="@+id/hLine1"

app:layout_constraintBaseline_toBaselineOf="@+id/userNameText"

android:hint="@string/usernameHint"

android:layout_marginTop="15dp"/>

</pre>

密碼標簽和密碼輸入框的約束和上面的約束類似。

下面我們來布局一下登錄和注冊按鈕啤挎。我們要求的效果是登錄按鈕和注冊按鈕都是水平居中的驻谆。有兩種方案,一種是使用guideline庆聘,我們添加一條垂直的的參考線胜臊,percent設置為0.5,然后注冊按鈕的right和登錄按鈕的left對齊參考線伙判。另一種方案是使用ConstraintLayout的鏈式風格象对。使用參考線的方式來對齊我們已經(jīng)用過了,下面我們嘗試使用chainStyle來布局宴抚。

<pre>

<Button

android:id="@+id/regButton"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/register"

android:layout_marginTop="40dp"

android:layout_marginEnd="30dp"

app:layout_constraintHorizontal_chainStyle="packed"

app:layout_constraintTop_toBottomOf="@id/userPasswordEdit"

app:layout_constraintRight_toLeftOf="@+id/loadButton"

app:layout_constraintLeft_toLeftOf="parent"

app:layout_constraintHorizontal_bias="0.5"

/>

<Button

android:id="@+id/loadButton"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/load"

app:layout_constraintTop_toTopOf="@id/regButton"

app:layout_constraintRight_toRightOf="parent"

app:layout_constraintLeft_toRightOf="@id/regButton"

/>

</pre>



上圖為官方文檔中幾種鏈式風格的介紹勒魔。對于我們的登錄界面我們需要用到Packed Chain風格,確保注冊和登錄按鈕的左右margin相等菇曲。

<pre>

<Button

android:id="@+id/regButton"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/register"

android:layout_marginTop="40dp"

android:layout_marginEnd="30dp"

app:layout_constraintHorizontal_chainStyle="packed"

app:layout_constraintTop_toBottomOf="@id/userPasswordEdit"

app:layout_constraintRight_toLeftOf="@+id/loadButton"

app:layout_constraintLeft_toLeftOf="parent"

/>

<Button

android:id="@+id/loadButton"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/load"

app:layout_constraintTop_toTopOf="@id/regButton"

app:layout_constraintRight_toRightOf="parent"

app:layout_constraintLeft_toRightOf="@id/regButton"

/>

</pre>

關于鏈式風格的詳細介紹冠绢,可以查閱官方文檔developer.android.google.cn/reference/android/support/constraint/ConstraintLayout.html。與之前創(chuàng)建的約束不一樣的地方在于我們在注冊按鈕中設置鏈風格為packed常潮。packed(我暫且稱為包式風格)弟胀,這種布局會把它和鏈上的組件包裹在一起,對外就像一個整體喊式。我們把注冊按鈕和登錄按鈕打包邮利,然后這個包的左右邊界就分別變?yōu)榱烁敢晥D的左右邊界,因為我們的寬度屬性設為wrap_content垃帅,所以這個包整體水平居中了,我們調(diào)整一下按鈕間的margin即可剪勿。

至此贸诚,我們完成了一個簡單的登錄界面的布局。個人認為有點費解的就是鏈式風格厕吉,本文中只展示了packed風格酱固,剩余的幾種風格,可以查閱android cn官方文檔即可头朱。

頭一次寫筆記运悲,可能寫的很雜亂,個人水平有限项钮,有不足之處還望各位大牛多多指點班眯。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末希停,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子署隘,更是在濱河造成了極大的恐慌宠能,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件磁餐,死亡現(xiàn)場離奇詭異违崇,居然都是意外死亡,警方通過查閱死者的電腦和手機诊霹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門羞延,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人脾还,你說我怎么就攤上這事伴箩。” “怎么了荠呐?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵赛蔫,是天一觀的道長。 經(jīng)常有香客問我泥张,道長呵恢,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任媚创,我火速辦了婚禮渗钉,結果婚禮上,老公的妹妹穿的比我還像新娘钞钙。我一直安慰自己鳄橘,他們只是感情好,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布芒炼。 她就那樣靜靜地躺著瘫怜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪本刽。 梳的紋絲不亂的頭發(fā)上鲸湃,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天,我揣著相機與錄音子寓,去河邊找鬼暗挑。 笑死,一個胖子當著我的面吹牛斜友,可吹牛的內(nèi)容都是我干的炸裆。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼鲜屏,長吁一口氣:“原來是場噩夢啊……” “哼烹看!你這毒婦竟也來了国拇?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤听系,失蹤者是張志新(化名)和其女友劉穎贝奇,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體靠胜,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡掉瞳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了浪漠。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片陕习。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖址愿,靈堂內(nèi)的尸體忽然破棺而出该镣,到底是詐尸還是另有隱情,我是刑警寧澤响谓,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布损合,位于F島的核電站,受9級特大地震影響娘纷,放射性物質(zhì)發(fā)生泄漏嫁审。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一赖晶、第九天 我趴在偏房一處隱蔽的房頂上張望律适。 院中可真熱鬧,春花似錦遏插、人聲如沸捂贿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽厂僧。三九已至,卻和暖如春了牛,著一層夾襖步出監(jiān)牢的瞬間吁系,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工白魂, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人上岗。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓福荸,卻偏偏與公主長得像,于是被迫代替她去往敵國和親肴掷。 傳聞我的和親對象是個殘疾皇子敬锐,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,107評論 25 707
  • 1.導入約束布局 在app/build.gradle文件中加入以下代碼 以下例子都基于 1.1-beta2版本 2...
    Mr_villain閱讀 4,298評論 0 8
  • 大家好背传,ConstraintLayout翻譯成中文也稱為約束布局,在整個使用體驗過程中真的是貫穿約束二字台夺,這一節(jié)先...
    J_J_Hui閱讀 1,518評論 0 2
  • ConstraintLayout径玖,讓布局更優(yōu)雅。 一颤介、為什么要用ConstraintLayout 上圖是網(wǎng)易100...
    宇是我閱讀 15,146評論 21 161
  • 老夫子總體來說還是講道理的梳星,射箭的水平高低和本人力氣大小有關,不必強求一定中靶滚朵。 他看中的是你是否按照禮的規(guī)定去做...
    海水藍閱讀 122評論 0 0