简介
Barrier一个辅助类,不会绘制到屏幕上,也不会展现给用户。它通过属性constraint_referenced_ids将一些View包裹在一起形成一个屏障,然后通过属性barrierDirection向左上右下四个方向给某个View提供约束条件,或者叫做屏障方向。使用这些约束条件(屏障方向)的View可以防止屏障内的View覆盖自己,当屏障内的某个View要覆盖自己的时候,屏障会自动移动,避免自己被覆盖。
使用的场景:当多语言展示的时候,比如需要根据文本长度设置其他对应控件的位置,有可能因为不同语言的切换导致长度不定,此时约束可能会导致布局错误。
以下根据不同的direction来简单做以讲解(在实际操作中发现,如果确定了barrier的direction,那么和barrier绑定的控件就不要设置他们的direction方向的约束,设置其他方面约束即可。比如说barrier的direction设置为left/start,那么barrier中绑定的控件就不要设置start/left约束了,这样才会达到barrier随着不同布局动态变化并且起到屏障的作用,即屏障内的是整体一块布局,屏障外的就是相对于屏障的部分,很清晰,否则会有布局问题)
Start (绑定控件最靠左边的控件位置为屏障起点,动态改变最左侧控件位置会引发整体屏障的区域变动)
![5777390-4cf52422e58d5597.png](https://i-blog.csdnimg.cn/blog_migrate/f3d62a761bc4ad14ef1efb317b5101d1.png)
![5777390-4f1517744d551f48.png](https://i-blog.csdnimg.cn/blog_migrate/6af3c1fb65b8c8c60e6e5ed317f94529.png)
XML文件实现
![5777390-f75e41d6e1344470.png](https://i-blog.csdnimg.cn/blog_migrate/a4fb8f5717b85341049a62948373cf2e.png)
![5777390-41db619ffd2648d2.png](https://i-blog.csdnimg.cn/blog_migrate/77930940b0358dcfc97bcb701eb29b02.png)
Activity实现
![5777390-8ba4cb556b162eef.png](https://i-blog.csdnimg.cn/blog_migrate/5df14c5abab43d0d5a08f73e791b00a3.png)
End (绑定控件最靠右边的控件位置为屏障起点,动态改变最右侧控件位置会引发整体屏障的区域变动)
![5777390-640a19eda7bd459e.png](https://i-blog.csdnimg.cn/blog_migrate/e894c0fbeef31117ba244b0f9f72bb66.png)
![5777390-bc358f9a542045f2.png](https://i-blog.csdnimg.cn/blog_migrate/10ef1b915b037ee2dd970d57508d51c4.png)
XML文件
![5777390-92e7c140af05ead8.png](https://i-blog.csdnimg.cn/blog_migrate/c52f293c53a227494466abd0f7543b37.png)
![5777390-927b4fa9fb709ece.png](https://i-blog.csdnimg.cn/blog_migrate/6442ec392a1679269878f53ce1b921d8.png)
Activity实现
![5777390-a5ca9def1c4346c5.png](https://i-blog.csdnimg.cn/blog_migrate/df3e7433abc0f7d71f1ad2ef801e12f4.png)
TOP (绑定控件最靠顶部的控件位置为屏障起点,动态改变最顶部控件位置会引发整体屏障的区域变动)
![5777390-af0c894c15ed8816.png](https://i-blog.csdnimg.cn/blog_migrate/1d79f67401cf0e7778389b40c209729a.png)
![5777390-a01aacd1c582cb6e.png](https://i-blog.csdnimg.cn/blog_migrate/a8f8e12f18ba79279014467a86abf6f9.png)
XML文件
![5777390-e3caed4d9397b0b9.png](https://i-blog.csdnimg.cn/blog_migrate/eaac95f4773b79fba38c7a7ca057537e.png)
![5777390-a5bbfbab29287c49.png](https://i-blog.csdnimg.cn/blog_migrate/e7a5a4a5646ef96d05eb5e56e29eb762.png)
Activity实现
![5777390-b120c42f3fa3223f.png](https://i-blog.csdnimg.cn/blog_migrate/ceb6114eae365821f81c60706cfc89bf.png)
BOTTOM (绑定控件最靠底部的控件位置为屏障起点,动态改变最底部控件位置会引发整体屏障的区域变动)
![5777390-32c13da63886de0b.png](https://i-blog.csdnimg.cn/blog_migrate/ba98ed4f6668dc740335f1a173c0f1b9.png)
![5777390-b3e91a4525c1b731.png](https://i-blog.csdnimg.cn/blog_migrate/14b86f57f8a5d7986a610369b43a7630.png)
XML文件
![5777390-80c7db2a81cfd3b3.png](https://i-blog.csdnimg.cn/blog_migrate/7a6c7c9cbcf05e8ad11ee31f25abf513.png)
![5777390-95b2dbc05c07034b.png](https://i-blog.csdnimg.cn/blog_migrate/ab1662e606e15a7968c9c9ec14f28c50.png)
Activity实现
![5777390-21d1bb885b547e0f.png](https://i-blog.csdnimg.cn/blog_migrate/c1332b8f01e3ff9e59f0a21bdbe04936.png)