ConstraintLayout布局目前網上也傳了很多的資料,也寫過不少的文章大家應該都看過。這次我就用個真是的按鈕來實現這個布局,登錄界面大家應該接觸很多,寫登錄界面的布局方式也很多,只要是安卓提供的布局都可以完成登錄界面,但是性能可能是沒有ConstraintLayout好,畢竟是google為了解決布局性能而出的一個布局。
圖1 ConstraintLayout布局案例
登錄界面簡單介紹
一個公司的APP產品少不了登錄界面,登錄界面是一個APP最基本的頁面,上圖的界面也很簡單,從頭到位也就是一些基礎控制項完成,大家可以看看圖2代碼結構,這個結構就是眼前登錄界面的全部了,外層就是ConstraintLayout一層。而內部也就是一些基礎控制項,不再像之前還要添加各種布局來完成這個界面,其實有人覺得用RelativeLayout也能完成這個界面,其實RelativeLayout完成也是可以,但是性能沒有這個好,還有就是ConstraintLayout可以支持百分比。
圖2登錄頁面的布局結構
ConstraintLayout和RelativeLayout對比
第一:意圖ConstraintLayout是通過對每個視圖應用一些規則來優化和展平布局的視圖層次結構,以避免嵌套。規則提醒您RelativeLayout,例如將左側設置為其他視圖的左側。
app:layout_constraintBottom_toBottomOf="@+id/view1"與之不同的是RelativeLayout,ConstraintLayout提供bias用於相對於手柄以0%和100%水平和垂直偏移定位視圖的值(用圓圈標記)。這些百分比(和分數)提供了跨不同屏幕密度和大小的視圖的無縫定位。
app:layout_constraintHorizontal_bias="0.33" <!-- from 0.0 to 1.0 -->app:layout_constraintVertical_bias="0.53" <!-- from 0.0 to 1.0 -->基線手柄(帶圓角的長管,圓形手柄下方)用於將視圖的內容與另一個視圖參考對齊。
方形手柄(在視圖的每個角上)用於調整dps中的視圖大小。
第二:RelativeLayout是一種雙向布局。它必須至少測量/布局兩次。ConstraintLayout不會遭受此性能損失。
第三:非常強大的用途是通過形成鏈來對元素進行分組。通過這種方式,我們可以形成一組視圖,這些視圖作為一個整體可以以期望的方式放置而不添加另一層次的層次結構以形成另一組視圖。
第四:除了重量,我們可以應用水平和垂直偏差,這只是從中心位移的百分比。(0.5的偏差意味著居中對齊。任何小於或等於的值意味著在相應方向上的相應移動)。
第五:另一個非常重要的特性是它尊重並提供處理GONE視圖的功能,這樣如果某些視圖通過java代碼設置為GONE,布局就不會中斷。
一個很大的區別是,即使視圖消失,ConstraintLayout也會尊重約束。因此,如果您有一個鏈並且您想讓視圖在中間消失,它將不會破壞布局。
所以ConstraintLayout好處多的去了,而且用起來也很簡單。同時也支持界面拖拉,但是我還是建議大家不要太依賴工具,能動手寫的就用手寫xml方便以後維護。