我有带有嵌套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的约束?
更新
我试图在不具有组的视图中直接使用可见性。它的工作(可见性更改在布局检查器中是正确的)。但是我遇到了另一个问题-一些观点被打破了。我认为,因为View在第一个xml中具有属性app:layout_constraintTop_toTopOf="parent"
,而在另一个布局中具有其他属性,但是不需要旧的attr!我无法清理旧属性并应用新属性?
答案 0 :(得分:1)
我对约束组字段了解不多。
但是我正在观看布局,并且您在组对象中使用了visibleibility =“ 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);
我希望它可以帮助您了解“组”字段。
答案 1 :(得分:1)
您可以使用Group's
更改ConstraintSet
的可见性。 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
的可见性。