Android里的ConstraintLayout是個(gè)非常強(qiáng)大的工具兔簇,它有效的解決了Android里L(fēng)ayout的層級嵌套的問題棘钞。使用一個(gè)ConstraintLayout可以實(shí)現(xiàn)之前多個(gè)Layout才能實(shí)現(xiàn)的效果。
本篇文章就介紹下ConstraintLayout里比較進(jìn)階用法之一:Barrier。
Barrier介紹
Barrier和Guideline 一樣捐寥,都是自己不可見豪嚎,只是用來定位的控件仁烹。
一個(gè)例子
假如我們要實(shí)現(xiàn)這樣一種效果候齿,控件C以控件A和B的最右邊緣對齊蚊锹。如下圖:
不用Barrier的實(shí)現(xiàn)方法
因?yàn)锳和B的寬度是動(dòng)態(tài)變化的瞳筏,所以控件C不能簡單的依賴于具體的A或B的右邊緣,只能把A和B放到一個(gè)ViewGroup里面牡昆,然后控件C依賴于這個(gè)新的ViewGroup的右邊緣姚炕。如下圖:
這樣實(shí)現(xiàn)雖然可以解決問題,但是卻引入了一層嵌套丢烘。而使用Barrier則可以不用嵌套就能實(shí)現(xiàn)這樣的效果柱宦。
使用Barrier的解決方案
首先,我們先定義控件A和B:
<Button
android:id="@+id/btn_a"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
android:layout_marginTop="200dp"
android:layout_marginLeft="30dp"
android:text="這是控件A播瞳,我比較寬"/>
<Button
android:id="@+id/btn_b"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintLeft_toLeftOf="@id/btn_a"
app:layout_constraintTop_toBottomOf="@id/btn_a"
android:layout_marginTop="30dp"
android:text="這是控件B"/>
然后掸刊,定義一個(gè)Barrier:
<android.support.constraint.Barrier
android:id="@+id/barrier"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:barrierDirection="end"
app:constraint_referenced_ids="btn_a,btn_b"/>
其中,app:constraint_referenced_ids="btn_a,btn_b"
這句指定這個(gè)Barrier是用來控制id為btn_a和btn_b的兩個(gè)控件赢乓。而app:barrierDirection="end"
這句等于在這兩個(gè)控件的右端設(shè)置一道“屏障”痒给。
最后,我們讓控件C依賴于這個(gè)Barrier骏全。注意這句:app:layout_constraintLeft_toLeftOf="@id/barrier"
<Button
android:id="@+id/btn_c"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintLeft_toLeftOf="@id/barrier"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="200dp"
android:layout_marginLeft="30dp"
android:text="這是控件C"/>
效果如下圖苍柏,注意中間那條豎線在App運(yùn)行的時(shí)候是看不到的。
我們可以動(dòng)態(tài)調(diào)整下控件A和B的寬度姜贡,發(fā)現(xiàn)控件C始終保持與A和B的最右端依賴试吁。
以上就是Barrier的使用方法簡介,希望對你有所幫助楼咳!