View.GONE不适用于“Constraint.Group”特定的子项

时间:2018-04-27 08:29:06

标签: android android-constraintlayout

我正在尝试"Constraint.Group"并且我有孩子的观点:A,B,C。

在代码中,"Constraint.Group".visibility = View.Gone确实有效,但如果我选择A.visibility = View.Gone,则不会对子视图产生影响。这是正常行为吗?

4 个答案:

答案 0 :(得分:6)

看起来群组可见性胜过群组各个视图的可见性。这是有道理的,因为每个视图都定义了一些可见性(gonevisibleinvisible),因此,如果尊重单个视图的可见性设置,则该组的完整性将被侵犯。换句话说,我们改变可见性的个人观点本质上不会成为小组的一部分。

答案 1 :(得分:1)

我同意Cheticamp的观点,并想补充说,您必须像他所说的那样分别切换可见性,或者创建一个常规组以更改内部的所有视图,或者创建一个本地组仅更改特定的视图,如下所示:

<ImageView
    android:id="@+id/view1"
    android:layout_width="0dp"
    android:layout_height="0dp"
    />

<ImageView
    android:id="@+id/view2"
    android:layout_width="0dp"
    android:layout_height="0dp"
    />

<android.support.constraint.Group
        android:id="@+id/group1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:visibility="visible"
        app:constraint_referenced_ids="view1,view2" />

<android.support.constraint.Group
        android:id="@+id/group2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:constraint_referenced_ids="view1" />

将无法更改组内的单个视图的可见性,但是通过这种方式,您可以更改group1可见性或group2可见性。

答案 2 :(得分:0)

看看ConstraintLayout的源代码:

enter image description here

像ConstraintLayout这样的外观会取出其子视图的visibilityelevation,并将这些值重新绑定到子视图本身。

因此无法在“组”中为子视图设置可见性。

某些解决方法是将单个视图引用到另一个组(这看起来很棘手,但我仍然可以接受)。

答案 3 :(得分:0)

如果您使用上述 2 个版本的约束布局,则应使用 isGone 属性。 group.isGone = true 但是如果你使用低于2的版本,由于一些错误,它不起作用。