我有嵌套的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并应用新的?
我对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字段。
你可以使用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
的可见性。