ConstraintSet是否与Group一起使用?

问题描述 投票:1回答:2

我有嵌套的ConstraintLayout布局,其他布局有约束,可以将它们应用到第一个布局。我试图通过应用不同的ConstraintSet来使用组约束来隐藏/显示一些视图。

<layout>
    <LinearLayout>

    <!-- Some Views here -->

    <android.support.constraint.ConstraintLayout>

        <!-- Some ImageViews with constraints (for different layouts images) -->

       <android.support.constraint.Group
           android:id="@+id/invisible_cells"
           android:layout_width="0dp"
           android:layout_height="0dp"
           android:visibility="gone"
           app:constraint_referenced_ids="image2,image3,image4"
           app:layout_constraintLeft_toLeftOf="parent"
           app:layout_constraintTop_toTopOf="parent" />

    </android.support.constraint.ConstraintLayout>

    </LinearLayout>
</layout>

和其他布局只有其他约束:

<android.support.constraint.ConstraintLayout>

    <!-- Some ImageViews with constraints (for different layouts images) -->

   <android.support.constraint.Group
       android:id="@+id/invisible_cells"
       android:layout_width="0dp"
       android:layout_height="0dp"
       android:visibility="gone"
       app:constraint_referenced_ids="image4" <<=== other ids!
       app:layout_constraintLeft_toLeftOf="parent"
       app:layout_constraintTop_toTopOf="parent" />

</android.support.constraint.ConstraintLayout>

并申请:

ConstraintSet set2 = new ConstraintSet();
set2.load(context, R.layout.item_news_photos_constraints_2);
//...
set2.applyTo(binding.constraintLayout);

它改变了ImageView的约束,但可见性没有改变。我做错了什么? ConstraintSet是否考虑了Group?

更新

我试图直接在没有Group的视图中使用可见性。它的工作(可见性变化在布局检查员中是正确的)。但我遇到了另一个问题 - 一些观点被打破了。我认为,因为View在第一个xml中具有属性app:layout_constraintTop_toTopOf="parent"并且在另一个布局中具有其他属性,但是不需要旧的attr!我不能清理旧的attrs并应用新的?

android android-constraintlayout
2个回答
1
投票

我对Constraint Group领域了解不多。

但我正在观看布局,并且您正在使用组对象中的visibility =“gone”。

例如,如果您已将某些视图附加到组,则可以更改项目的可见性状态,只需更改组的可见性

example_layout

<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>

然后在Activity / Fragment中,您应该能够根据您的条件更改Java中的状态。

Group group = findViewById(R.id.group);
//Change the visibility when you need it.
group.setVisibility(View.GONE or View.VISIBLE);

我希望它能帮助您理解Group字段。


1
投票

你可以使用Group's更改ConstraintSet visibilty。你的ConstraintSets的问题在于你并没有真正改变它们之间的可见性。在第一个中,您将image2,image3和image4的visibility设置为gone。在第二个中,您将image4的可见性设置为gone。这意味着所有这些Views的可见性将保持不变(gone)因为没有真正改变。

要在应用第二个ConstraintSet时显示image2和image3,你应该这样做(在第二个布局中):

<android.support.constraint.Group
    android:id="@+id/invisible_cells"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:visibility="visible"
    app:constraint_referenced_ids="image2,image3" />

作为旁注,您不需要为android.support.constraint.Group标记添加任何约束。它仅用于控制引用的Views的可见性。

© www.soinside.com 2019 - 2024. All rights reserved.