在之前的xml布局中,我有多个视图组,其中包含很少的元素。隐藏每个视图组也会隐藏其所有子元素。因为我想要平面结构并尝试 ConstraintLayout 。酷我知道如何链接元素与蔓延正确对齐。由于扁平结构没有包裹 LinearLayout ,现在我有3个视图要隐藏。我想知道是否有替代方案可以实现这一点。
没有约束布局
<android.support.constraint.ConstraintLayout
.....
.....
.....
#happy that i no longer need LinearLayout for align properly
<android.support.v7.widget.AppCompatTextView
android:id="@+id/lblTerminal"
android:background="@color/lightGray"
style="@style/PurpleSubtitle"
android:drawableRight="@drawable/i_down_yellow"
android:drawableEnd="@drawable/i_down_yellow"
android:padding="10dp"
android:text="@string/lblTerminal"
android:layout_weight="5"
android:layout_width="0dp"
android:layout_height="50dp"
app:layout_constraintTop_toBottomOf="@+id/txt_search"
app:layout_constraintRight_toLeftOf="@+id/view3"
app:layout_constraintLeft_toLeftOf="@+id/guideline2"
app:layout_constraintHorizontal_chainStyle="spread"/>
<View
android:background="@android:color/black"
android:layout_width="1dp"
android:layout_height="50dp"
android:id="@+id/view3"
app:layout_constraintTop_toBottomOf="@+id/txt_search"
app:layout_constraintRight_toLeftOf="@+id/lblCategory"
app:layout_constraintLeft_toRightOf="@+id/lblTerminal" />
<android.support.v7.widget.AppCompatTextView
android:id="@+id/lblCategory"
android:background="@color/lightGray"
android:padding="10dp"
android:drawableRight="@drawable/i_down_yellow"
android:drawableEnd="@drawable/i_down_yellow"
style="@style/PurpleSubtitle"
android:text="@string/lblCategory"
android:layout_width="0dp"
android:layout_height="50dp"
app:layout_constraintTop_toTopOf="@+id/view3"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintLeft_toRightOf="@+id/view3" />
......
......
......
</android.support.constraint.ConstraintLayout>
使用约束布局
{{1}}
答案 0 :(得分:31)
是的,现在在 ConstraintLayout 中我们也可以使用组
处理特定视图组的可见性<强> 强>
这是当前ConstraintLayout中引入的新功能 在测试版中。
如何将beta ConstraintLayout添加到项目中,请按照以下步骤进行操作
在项目gradle文件中添加maven支持,如下所示
allprojects {
repositories {
maven { url 'https://maven.google.com' }
jcenter()
}
}
然后在app gardle依赖项中添加ConstarintLayout库依赖
compile 'com.android.support.constraint:constraint-layout:1.1.0-beta3'
现在您必须在ConstraintLayou中添加组,如下所示
<android.support.constraint.Group
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:constraint_referenced_ids="button7,button3,button2"
android:id="@+id/group" />
群组参考ID中的位置
app:constraint_referenced_ids="button7,button3,button2"
包含逗号分隔的视图ID,您希望处理运行时,因此在活动中,您只需按如下方式绑定群组并处理可见性
import android.support.constraint.Group; //import statement in activity
Group group=(Group)findViewById(R.id.group);//bind view from xml
group.setVisibility(View.VISIBLE);//this will visible all views
group.setVisibility(View.GONE);//this will set Gone to all views
group.setVisibility(View.INVISIBLE);//this will set INVISIBLE to all view
EDIT ConrtsaintLayout 1.1.0稳定版于2018年4月12日发布 https://androidstudio.googleblog.com/2018/04/constraintlayout-110.html
implementation 'com.android.support.constraint:constraint-layout:1.1.0'
编辑Android X如果有人使用android x包你可以找到包 信息在这里
答案 1 :(得分:1)
如果您使用的是Beta版的Constraintlayout,请遵循@pavan的Heart Rate Control Point
如果您使用的是AndroidX,请按照以下步骤集成约束布局和组:
1)在您的项目中添加AndroidX约束布局依赖性:
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
2)在项目中使用ConstraintLayout组,如下所示:
<androidx.constraintlayout.widget.Group
android:id="@+id/groupDetails"
android:layout_width="wrap_content"
android:visibility="gone" // Default visibility for group views
app:constraint_referenced_ids="textViewUserName, ..." // id's which you want to include in group
android:layout_height="wrap_content"/>
3)以下是切换可见性的编码部分:
private lateinit var groupDetails:Group
...
groupDetails = findViewById(R.id.groupDetails)
groupDetails.visibility = View.GONE // Change visibility
希望使用AndroidX会有所帮助。
答案 2 :(得分:-2)
您也可以使用相同的线性布局作为约束布局的子项,或者您也可以将所有这3个小部件作为另一个约束布局的子项,并将该布局作为主要约束布局的子项。
然后你可以像以前一样保持可见性和其他东西。