7

Dans la présentation xml précédente, j'ai plusieurs groupes de vue avec quelques éléments à l'intérieur. Masquer chaque groupe de vues masque également tous ses éléments enfants. Puisque je voulais avoir une structure plate et essayé ConstraintLayout. Cool Je sais comment chaîner l'élément avec la propagation pour aligner correctement. Depuis la structure plate n'a pas enveloppé LinearLayout, maintenant j'ai 3 vues à masquer à la place. Je voudrais savoir s'il existe une alternative pour y parvenir.Afficher la visibilité du groupe de chaînes dans la disposition de contrainte

Sans mise en page contrainte

<RelativeLayout.... 
.......... 
.......... 
<LinearLayout 
     android:visibility="gone" 
     tools:visibility="visible" 
     android:id="@+id/filter_area" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <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="wrap_content" /> 

     <View 
      android:background="@android:color/black" 
      android:layout_width="1dp" 
      android:layout_height="match_parent"/> 

     <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_weight="5" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" /> 


    </LinearLayout> 
    ....... 
    ....... 
    </RelativeLayout> 

Avec la mise en page contrainte

<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> 
+0

Voulez-vous activer la visibilité de l'ensemble de la disposition des contraintes ou de l'enfant? –

+0

oui je veux basculer la visibilité des éléments de groupe de chaîne – Sanny

+1

Alors, quel est le problème lorsque vous changez de visibilité? –

Répondre

8

Oui, maintenant dans ConstraintLayout aussi nous pouvons gérer la visibilité du groupe particulier de vues à l'aide du groupe

Ceci est une nouvelle fonctionnalité introduite dans ConstraintLayout qui est actuellement en version bêta.

Comment ajouter ConstraintLayout bêta au projet suivez les étapes ci-dessous

ajouter le support Maven dans le projet fichier gradle comme ci-dessous

allprojects { 
    repositories { 
     maven { url 'https://maven.google.com' } 
     jcenter() 
    } 
} 

puis dans app dépendances gardle ajouter la dépendance de la bibliothèque ConstarintLayout

maintenant vous devez ajouter un groupe dans votre ConstraintLayou comme suivre

<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" /> 

où dans le groupe de référence id

app:constraint_referenced_ids="button7,button3,button2" 

contient l'identifiant de vue séparés par des virgules de vous voulez gérer le temps d'exécution , donc dans l'activité vous venez de lier Group comme ci-dessous et gérer la visibilité

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 
+0

Est-ce que le 'group' est retiré de' constraintLayout'? Je ne le trouve nulle part – mcy

+0

Il est dans la version bêta suivez les étapes pour savoir comment ajouter la version bêta vérifier c'est la nouvelle version bêta 3 https : //androidstudio.googleblog.com/2017/10/constraintlayout-110-beta-3-is-now.html? m = 1 – Pavan

+0

hmm; merci beaucoup. – mcy

-1

Vous pouvez utiliser la même mise en page linéaire en tant qu'enfant de mise en page Constraint trop, ou vous pouvez également faire tous les 3 widgets en tant qu'enfant d'une autre mise en page contrainte et que cette mise en forme est enfant de la mise en page principale des contraintes.

Ensuite, vous pouvez maintenir la visibilité et d'autres choses comme avant.

+0

hmm je veux avoir la structure plate, semble que je dois utiliser le groupe de vue comme vous l'avez mentionné :-( – Sanny

+0

Oui, vous pouvez y parvenir pensé à la fois la disposition des contraintes ou la disposition linéaire –

+0

ouais @lelloman, Si J'enveloppe avec LinearLayout, aucun point en utilisant ConstraintLayout – Sanny