如何在 Constraintlayout 中给 Group 背景色
How to give background color to Group in Constraintlayout
我在约束布局中对 3 个文本视图进行了分组。我有小组的背景,但它不起作用。
<android.support.constraint.Group
android:id="@+id/group"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@color/text_color_3"
app:constraint_referenced_ids="price_tv,currency_unit_tv,frequency_tv" />
还有没有其他的回合可以做。
根据官方文档,组仅用于控制可见性,您不能更改特定组的视图背景。
文档:此 class 控制一组引用小部件的可见性。通过添加到以逗号分隔的 ID 列表来引用小部件。
要动态更改它,请用于所有三个 TextView。
textView.setBackgroundColor(Color.RED);
或
textView..setBackgroundColor(Color.parseColor("#ffffff"));
根据documentation,Group
仅用于控制一组小部件的可见性。
您可以将背景设置为 View
并将视图限制为您希望背景出现的方式。
在下面的代码示例中,在将背景设置为 ID 为 background
的 View
之后,我将视图的顶部、左侧和右侧限制为 parent
并且视图底部到组中的最后一个 TextView
,在本例中是 ID 为 textView3
的 TextView
。我还在 textView3
中添加了 16dp
底边距,这样背景看起来就不会很奇怪了。您也可以为此使用 Guideline。
另请注意,需要在需要背景的视图组之前添加视图背景。如果它放在视图组之后,背景将被绘制在组上方(这不是您想要的)。
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#444444">
<View
android:id="@+id/background"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="#FFFFFF"
app:layout_constraintBottom_toBottomOf="@+id/textView3"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="TextView 1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="TextView 2"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView1"/>
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:paddingBottom="16dp"
android:text="TextView 3"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView2"/>
</android.support.constraint.ConstraintLayout>
希望对您有所帮助。
组仅用于控制 app:constraint_referenced_ids 中引用 ID 的可见性。根据documentation。解决方案只是将视图放入 Viewgroup 中。我不得不将所有视图放在 ConstraintLayout 中以控制可见性 + CL 中链接视图的好处。
<android.support.constraint.ConstraintLayout
android:id="@+id/area_range_constraint"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
visibility = "View.VISIBLE"
>
<TextView
android:id="@+id/area_title_tv"
style="@style/filter_heading_style"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/STR_AREA"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:id="@+id/area_range_from"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:layout_marginRight="8dp"
android:layout_marginTop="8dp"
android:hint="@string/STR_MIN_AREA"
android:inputType="number"
android:maxLength="10"
android:text='@{searchQueryModel.areaMin==null ? "": StringUtils.getDelimeterString(String.valueOf(safeUnbox(searchQueryModel.getAreaMin())))}'
android:textAlignment="center"
android:textDirection="anyRtl"
android:textSize="14sp"
app:layout_constraintEnd_toStartOf="@+id/textView254"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/area_title_tv" />
<EditText
android:id="@+id/area_range_to"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:layout_marginStart="8dp"
android:hint="@string/STR_MAX_AREA"
android:inputType="number"
android:maxLength="10"
android:text='@{searchQueryModel.areaMax==null ? "": StringUtils.getDelimeterString(String.valueOf(safeUnbox(searchQueryModel.getAreaMax())))}'
android:textAlignment="center"
android:textDirection="anyRtl"
android:textSize="14sp"
app:layout_constraintBaseline_toBaselineOf="@+id/textView254"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/textView254" />
<TextView
android:id="@+id/textView254"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/STR_TO"
android:textColor="@color/text_color_3"
android:textSize="@dimen/text_size_normal"
app:layout_constraintBaseline_toBaselineOf="@+id/area_range_from"
app:layout_constraintEnd_toStartOf="@+id/area_range_to"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/area_range_from" />
<TextView
android:id="@+id/area_range_value_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginLeft="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:text='@{`(` + areaUnit + `)`}'
android:textColor="@color/colorPrimary"
android:textSize="@dimen/text_size_normal"
app:layout_constraintBottom_toBottomOf="@+id/area_title_tv"
app:layout_constraintStart_toEndOf="@+id/area_title_tv"
app:layout_constraintTop_toTopOf="@+id/area_title_tv" />
</android.support.constraint.ConstraintLayout>
Group 对于 ConstraintLayout 中的可见性很有用。 ConstraintLayout 的引入是为了去除多个 ViewGroups(Layouts) 的层次结构。
我们可以简单地用于背景目的。如果您只有 3 个 TextView 并且想将背景颜色应用于 TextView,请不要将其添加到任何 ViewGroup(布局),只需检查一下:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#AAA">
<View
android:id="@+id/background"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="#FFF"
app:layout_constraintBottom_toBottomOf="@+id/textView3"
app:layout_constraintEnd_toEndOf="@+id/textView1"
app:layout_constraintStart_toStartOf="@+id/textView1"
app:layout_constraintTop_toTopOf="@+id/textView1" />
<TextView
android:id="@+id/textView1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:padding="8dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="TextView" />
<TextView
android:id="@+id/textView2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:padding="8dp"
app:layout_constraintEnd_toEndOf="@+id/textView1"
app:layout_constraintStart_toStartOf="@+id/textView1"
app:layout_constraintTop_toBottomOf="@+id/textView1"
tools:text="TextView" />
<TextView
android:id="@+id/textView3"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:padding="8dp"
app:layout_constraintEnd_toEndOf="@+id/textView1"
app:layout_constraintStart_toStartOf="@+id/textView1"
app:layout_constraintTop_toBottomOf="@+id/textView2"
tools:text="TextView" />
</android.support.constraint.ConstraintLayout>
结果:
你可以找到来源here
虽然群组只是为了可见性目的,但您可以轻松地为群组添加背景。
组视图没有任何宽度和高度,因此环绕内容在实际屏幕上是不可见的。
为组视图提供约束并设置背景属性。
例如:
<android.support.constraint.Group
android:id="@+id/group"
android:layout_width="0dp" //match constraint
android:layout_height="0dp" //match constraint
android:background="@color/text_color_3"
app:constraint_referenced_ids="price_tv,currency_unit_tv,frequency_tv"
app:layout_constraintBottom_toBottomOf="@+id/frequency_tv"
app:layout_constraintEnd_toEndOf="@+id/price_tv"
app:layout_constraintStart_toStartOf="@+id/price_tv"
app:layout_constraintTop_toTopOf="@+id/price_tv" />
//below are your TextViews aligned vertically
<TextView android:id="@+id/price_tv"/>
<TextView android:id="@+id/currency_unit_tv" .../>
<TextView android:id="@+id/frequency_tv" .../>
希望对您有所帮助:)
使用 ConstraintLayout 2 中引入的新图层
我在约束布局中对 3 个文本视图进行了分组。我有小组的背景,但它不起作用。
<android.support.constraint.Group
android:id="@+id/group"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@color/text_color_3"
app:constraint_referenced_ids="price_tv,currency_unit_tv,frequency_tv" />
还有没有其他的回合可以做。
根据官方文档,组仅用于控制可见性,您不能更改特定组的视图背景。
文档:此 class 控制一组引用小部件的可见性。通过添加到以逗号分隔的 ID 列表来引用小部件。
要动态更改它,请用于所有三个 TextView。
textView.setBackgroundColor(Color.RED);
或
textView..setBackgroundColor(Color.parseColor("#ffffff"));
根据documentation,Group
仅用于控制一组小部件的可见性。
您可以将背景设置为 View
并将视图限制为您希望背景出现的方式。
在下面的代码示例中,在将背景设置为 ID 为 background
的 View
之后,我将视图的顶部、左侧和右侧限制为 parent
并且视图底部到组中的最后一个 TextView
,在本例中是 ID 为 textView3
的 TextView
。我还在 textView3
中添加了 16dp
底边距,这样背景看起来就不会很奇怪了。您也可以为此使用 Guideline。
另请注意,需要在需要背景的视图组之前添加视图背景。如果它放在视图组之后,背景将被绘制在组上方(这不是您想要的)。
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#444444">
<View
android:id="@+id/background"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="#FFFFFF"
app:layout_constraintBottom_toBottomOf="@+id/textView3"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="TextView 1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="TextView 2"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView1"/>
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:paddingBottom="16dp"
android:text="TextView 3"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView2"/>
</android.support.constraint.ConstraintLayout>
希望对您有所帮助。
组仅用于控制 app:constraint_referenced_ids 中引用 ID 的可见性。根据documentation。解决方案只是将视图放入 Viewgroup 中。我不得不将所有视图放在 ConstraintLayout 中以控制可见性 + CL 中链接视图的好处。
<android.support.constraint.ConstraintLayout
android:id="@+id/area_range_constraint"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
visibility = "View.VISIBLE"
>
<TextView
android:id="@+id/area_title_tv"
style="@style/filter_heading_style"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/STR_AREA"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:id="@+id/area_range_from"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:layout_marginRight="8dp"
android:layout_marginTop="8dp"
android:hint="@string/STR_MIN_AREA"
android:inputType="number"
android:maxLength="10"
android:text='@{searchQueryModel.areaMin==null ? "": StringUtils.getDelimeterString(String.valueOf(safeUnbox(searchQueryModel.getAreaMin())))}'
android:textAlignment="center"
android:textDirection="anyRtl"
android:textSize="14sp"
app:layout_constraintEnd_toStartOf="@+id/textView254"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/area_title_tv" />
<EditText
android:id="@+id/area_range_to"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:layout_marginStart="8dp"
android:hint="@string/STR_MAX_AREA"
android:inputType="number"
android:maxLength="10"
android:text='@{searchQueryModel.areaMax==null ? "": StringUtils.getDelimeterString(String.valueOf(safeUnbox(searchQueryModel.getAreaMax())))}'
android:textAlignment="center"
android:textDirection="anyRtl"
android:textSize="14sp"
app:layout_constraintBaseline_toBaselineOf="@+id/textView254"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/textView254" />
<TextView
android:id="@+id/textView254"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/STR_TO"
android:textColor="@color/text_color_3"
android:textSize="@dimen/text_size_normal"
app:layout_constraintBaseline_toBaselineOf="@+id/area_range_from"
app:layout_constraintEnd_toStartOf="@+id/area_range_to"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/area_range_from" />
<TextView
android:id="@+id/area_range_value_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginLeft="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:text='@{`(` + areaUnit + `)`}'
android:textColor="@color/colorPrimary"
android:textSize="@dimen/text_size_normal"
app:layout_constraintBottom_toBottomOf="@+id/area_title_tv"
app:layout_constraintStart_toEndOf="@+id/area_title_tv"
app:layout_constraintTop_toTopOf="@+id/area_title_tv" />
</android.support.constraint.ConstraintLayout>
Group 对于 ConstraintLayout 中的可见性很有用。 ConstraintLayout 的引入是为了去除多个 ViewGroups(Layouts) 的层次结构。
我们可以简单地用于背景目的。如果您只有 3 个 TextView 并且想将背景颜色应用于 TextView,请不要将其添加到任何 ViewGroup(布局),只需检查一下:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#AAA">
<View
android:id="@+id/background"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="#FFF"
app:layout_constraintBottom_toBottomOf="@+id/textView3"
app:layout_constraintEnd_toEndOf="@+id/textView1"
app:layout_constraintStart_toStartOf="@+id/textView1"
app:layout_constraintTop_toTopOf="@+id/textView1" />
<TextView
android:id="@+id/textView1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:padding="8dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="TextView" />
<TextView
android:id="@+id/textView2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:padding="8dp"
app:layout_constraintEnd_toEndOf="@+id/textView1"
app:layout_constraintStart_toStartOf="@+id/textView1"
app:layout_constraintTop_toBottomOf="@+id/textView1"
tools:text="TextView" />
<TextView
android:id="@+id/textView3"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:padding="8dp"
app:layout_constraintEnd_toEndOf="@+id/textView1"
app:layout_constraintStart_toStartOf="@+id/textView1"
app:layout_constraintTop_toBottomOf="@+id/textView2"
tools:text="TextView" />
</android.support.constraint.ConstraintLayout>
结果:
你可以找到来源here
虽然群组只是为了可见性目的,但您可以轻松地为群组添加背景。
组视图没有任何宽度和高度,因此环绕内容在实际屏幕上是不可见的。 为组视图提供约束并设置背景属性。 例如:
<android.support.constraint.Group
android:id="@+id/group"
android:layout_width="0dp" //match constraint
android:layout_height="0dp" //match constraint
android:background="@color/text_color_3"
app:constraint_referenced_ids="price_tv,currency_unit_tv,frequency_tv"
app:layout_constraintBottom_toBottomOf="@+id/frequency_tv"
app:layout_constraintEnd_toEndOf="@+id/price_tv"
app:layout_constraintStart_toStartOf="@+id/price_tv"
app:layout_constraintTop_toTopOf="@+id/price_tv" />
//below are your TextViews aligned vertically
<TextView android:id="@+id/price_tv"/>
<TextView android:id="@+id/currency_unit_tv" .../>
<TextView android:id="@+id/frequency_tv" .../>
希望对您有所帮助:)
使用 ConstraintLayout 2 中引入的新图层