如何使用约束布局1.1中的新function?

有谁知道如何使用约束布局1.1中的新function,即障碍和基于百分比的维度? 网上绝对没有可用的文档,最近的Google I / Odevise工具的讨论仅覆盖了占位符。 顺便说一句,我发现如何使用组,这也是一个新的function。 你需要简单地添加

<android.support.constraint.Group app:constraint_referenced_ids="button1, button2" android:layout_width="wrap_content" android:layout_height="wrap_content"/> 

到约束布局,其中app:constraint_referenced_ids是一个string,您应该枚举逗号分隔的视图id,您希望与此组关联。 现在,切换组的可见性会改变所引用的所有视图的可见性,我认为这是目前此function的主要目的。

Solutions Collecting From Web of "如何使用约束布局1.1中的新function?"

当这个问题首次被提出时,关于新function的文档非常稀less。 我能find的最好的是在这个Reddit的post ! 但是那里的信息给了我足够的提示来创build一个水平屏障的约束布局。 它实际上工作,新的(testing版)约束布局也修复了wrap_content一些不好的问题。 我对约束布局testing版的第一印象非常积极,在很多额外的testing中都受到了阻碍。

由于这个问题已经发布, 约束布局testing版3已经发布,我已经更新了这篇文章中的说明,以反映这一点。 此Beta包含一个令人兴奋的新function:使用约束圆和angular度参数的小部件的循环定位。 甚至有文件可用!

在使用新的东西之前,将beta约束布局添加到项目中。 (我正在运行Android Studio 2.3.3,为那些记笔记。)

app / build.gradle中 ,将约束布局依赖关系更改为:

compile 'com.android.support.constraint:constraint-layout:1.1.0-beta3'

您可能还需要将maven资源库添加到您的项目的build.gradle (这是一个不同的文件,在您的项目的根目录中)。 find所有的项目仓库部分,并添加: maven { url 'https://maven.google.com' } url'https://maven.google.com maven { url 'https://maven.google.com' }所以整个部分应该是这样的:

 allprojects { repositories { jcenter() maven { url 'https://maven.google.com' } } } 

现在的有趣的东西! 以下片段创build了一个水平屏障 ,以便bottom_textviewincluded_layoutmultiline_textview之下。

 <android.support.constraint.Barrier android:layout_width="0dp" android:layout_height="wrap_content" android:id="@+id/barrier1" app:barrierDirection="bottom" app:constraint_referenced_ids="included_layout, multiline_textview" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toBottomOf="@+id/multiline_textview" /> <TextView android:id="@+id/bottom_textview" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toBottomOf="@+id/barrier1" android:layout_width="0dp" android:layout_height="wrap_content" /> 

第一印象:障碍是伟大的! 我的新布局更平坦,更简单,而且似乎仍然是我想要的。 这绝对值得尝试。

更详细的文档正在逐渐变得可用:

  • 一个关于循环定位的优秀文章,完整的animation

  • 一个很好的关于barrierlayout.com (!)的 详细文章

  • 一篇关于medium.com上新的1.1.x小部件的文章(包括大量的细节和示例代码)

  • 来自androidtkt.com的文章,举例说明了障碍,组合,占位符和百分比维度

@Vyacheslav A的答案也有一个很好的总结,什么新function可以做。

1.百分比尺寸

宽度为0dp(或match_constraint)的小部件的默认行为是扩展的(可通过layout_constraintWidth_default属性进行configuration)。 在ConstraintLayout 1.0.x中,我们可以select将其更改为包装,而在1.1.x中,我们有一个新的值,百分比,允许我们设置一个小部件来获取可用空间的一定百分比。

  <!-- the widget will take 40% of the available space --> app:layout_constraintWidth_default="percent" app:layout_constraintWidth_percent="0.4" 

2.障碍

从这个新的小部件,我们有一些来自ConstraintLayout.com的例子。 障碍将会避免一个或多个小部件绕过障碍。 发生这种情况时,屏障将自行移动,并避免将其放置在其上方。 在下面的例子中,text1和text2的end属性不能绕过障碍。 发生这种情况时,屏障将自行移动到右侧(或在左侧,如果是在RTL布局中)。 在处理不同的小部件时,这尤其less见,取决于某些configuration或国际化。

 <android.support.constraint.ConstraintLayout...> <TextView android:id=”@+id/text1" ... /> <TextView android:id=”@+id/text2" ... /> <android.support.constraint.Barrier android:id=”@+id/barrier” android:layout_width=”wrap_content” android:layout_height=”wrap_content” app:barrierDirection=”end” <!-- start, top, bottom, right... --> app:constraint_referenced_ids=”text1,text2" /> <TextView android:id=”@+id/text3" ... app:layout_constraintStart_toEndOf=”@+id/barrier” /> </android.support.constraint.ConstraintLayout> 

3.集团

组与指南一样,是大小为0的小部件。但小组有助于将一些操作应用于一组小部件。 最常见的情况是控制小部件集合的可见性。 在处理这种情况时,最常见的解决scheme是在Activity或Fragment中维护一个或一组视图,甚至添加一个ViewGroup,并将其中的所有视图控制在容器的可见性中。 现在,您只需要将它们的ID添加到组中,组将会将操作传播到所有插入的视图。

 <android.support.constraint.ConstraintLayout ...> <TextView android:id=”@+id/text1" ... /> <TextView android:id=”@+id/text2" ... /> <android.support.constraint.Group android:id=”@+id/group” ... app:constraint_referenced_ids=”text1,text2" /> </android.support.constraint.ConstraintLayout> 

在这种情况下,如果我们打电话

 group.setVisibility(View.GONE); 

那么text1和text2将会收到GONE的可见性。

原文在这里 。

官方文档与描述在这里。

这里有关于障碍的一些信息。