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>
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'
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.