web-dev-qa-db-fra.com

basculer la visibilité du groupe de chaînes dans la disposition des contraintes

Dans la mise en page XML précédente, j'ai plusieurs groupes de vues contenant peu d'éléments. Masquer chaque groupe de vues masquera également tous ses éléments enfants. Depuis que je voulais avoir une structure plate et essayé ConstraintLayout . Cool, je sais comment enchaîner un élément avec la propagation pour aligner correctement. Depuis la structure plate n'a pas enveloppé LinearLayout , maintenant j'ai 3 vues à cacher à la place. Je voudrais savoir s'il existe une alternative pour y parvenir.

Sans disposition de 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 disposition des contraintes

    <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>
14
Tixeon

Oui, donc maintenant dans ConstraintLayout, nous pouvons également gérer la visibilité d'un 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 la bêta ConstraintLayout au projet, suivez les étapes ci-dessous

ajoute le support maven dans le fichier gradile du projet comme ci-dessous

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

puis dans les dépendances de l'application gardle ajouter la dépendance de la bibliothèque ConstarintLayout

compile 'com.Android.support.constraint:constraint-layout:1.1.0-beta3'

_ {vous devez maintenant ajouter un groupe dans votre contrainteLayou comme suit} _

<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 l'ID de référence du groupe

app:constraint_referenced_ids="button7,button3,button2"

contient les identifiants de vue séparés par des virgules que vous souhaitez gérer au moment de l'exécution, de sorte qu'en activité, vous liez simplement Group comme ci-dessous et gérez 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

EDIT la version stable de ConrtsaintLayout 1.1.0 publiée le 12 avril 2018https://androidstudio.googleblog.com/2018/04/constraintlayout-110.html

implementation 'com.Android.support.constraint:constraint-layout:1.1.0'
27
Pavan

Si vous utilisez la version bêta de constraintlayout, veuillez suivre le réponse de @ pavan

Si vous utilisez AndroidX, veuillez suivre les étapes ci-dessous pour intégrer constraintlayout et Group:

1) Ajoutez la dépendance de la structure de contrainte AndroidX dans votre projet:

implementation 'androidx.constraintlayout:constraintlayout:1.1.3'

2) Utilisez le groupe ConstraintLayout comme ci-dessous dans votre projet:

<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) Voici la partie codant pour la visibilité de la bascule:

private lateinit var groupDetails:Group

...
groupDetails = findViewById(R.id.groupDetails)
groupDetails.visibility = View.GONE // Change visibility

J'espère que ça aide en utilisant AndroidX.

0
pRaNaY