J'ai groupé 3 textview dans une mise en page de contrainte. J'ai de l'expérience dans le groupe, mais ça ne marche pas.
<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" />
Y a-t-il un autre moyen de le faire?.
Le groupe n'est utilisé que pour contrôler la visibilité des identifiants référencés dans app: constraint_referenced_ids. Selon la documentation . La solution consiste simplement à placer des vues dans un groupe de vues. J'ai dû mettre toutes les vues dans ConstraintLayout pour construire la visibilité + les avantages de l'enchaînement des vues dans 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>
Selon la documentation , Group
est uniquement utilisé pour contrôler la visibilité d'un ensemble de widgets.
Vous pouvez définir l'arrière-plan sur View
et limiter la vue à l'apparence souhaitée pour l'arrière-plan.
Dans l'exemple de code ci-dessous, après avoir défini l'arrière-plan sur View
avec l'ID background
, j'ai contraint les côtés supérieur, gauche et droit de la vue à la parent
et le bas de la vue à la dernière TextView
du groupe, ce qui dans ce cas. est la TextView
avec l'ID textView3
. J'ai également ajouté un 16dp
bottom padding à textView3
pour que l'arrière-plan ne soit pas bizarre. Vous pouvez également utiliser un Guideline for this.
Notez également que l'arrière-plan de la vue doit être ajouté avant le groupe de vues nécessitant de l'arrière-plan. S'il est placé après le groupe de vues, l'arrière-plan est dessiné sur le groupe (et ce n'est pas ce que vous voulez).
<?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>
J'espère que ça aide.
Le groupe est utile pour la visibilité dans ConstraintLayout. ConstraintLayout est introduit pour supprimer la hiérarchie des multiples ViewGroups (Layouts).
Nous pouvons simplement utiliser à des fins d'arrière-plan. Si vous avez simplement 3 TextView et que vous souhaitez appliquer la couleur d'arrière-plan à TextView, ne l'ajoutez pas à un ViewGroup (Layout), vérifiez simplement ceci:
<?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>
Résultat:
Vous pouvez trouver la source ici