web-dev-qa-db-fra.com

Comment désactiver/activer tous les enfants sur LinearLayout dans Android

Y a-t-il moyen de programmer que tous les enfants d'une certaine mise en page?

Par exemple, j'ai cette mise en page avec deux enfants:

<LinearLayout Android:layout_height="wrap_content"
        Android:id="@+id/linearLayout1" Android:layout_width="fill_parent">
        <SeekBar Android:layout_height="wrap_content" Android:id="@+id/seekBar1"
            Android:layout_weight="1" Android:layout_width="fill_parent"></SeekBar>
        <TextView Android:id="@+id/textView2" Android:text="TextView"
            Android:layout_width="wrap_content" Android:textAppearance="?android:attr/textAppearanceLarge"
            Android:layout_height="wrap_content"></TextView>
    </LinearLayout>

et je veux faire quelque chose comme:

LinearLayout myLayout = (LinearLayout) findViewById(R.id.linearLayout1);
myLayout.setEnabled(false);

Afin de désactiver les deux vues de texte.

Une idée comment?

16
user733284

Un LinearLayout étend ViewGroup, vous pouvez donc utiliser les méthodes getChildCount () et getChildAt (index) pour parcourir vos enfants LinearLayout et en faire ce que vous voulez. Je ne suis pas sûr de ce que vous voulez dire par activer/désactiver, mais si vous essayez simplement de les cacher, vous pouvez faire setVisibility (View.GONE);

Donc, cela ressemblerait à quelque chose comme ça:

LinearLayout myLayout = (LinearLayout) findViewById(R.id.linearLayout1);
for ( int i = 0; i < myLayout.getChildCount();  i++ ){
    View view = myLayout.getChildAt(i);
    view.setVisibility(View.GONE); // Or whatever you want to do with the view.
}
26
SBerg413

Vous pouvez également désactiver/activer sans utiliser setVisibility ()

Ajoutez un View.OnClickListener à votre CheckBox puis transmettez la vue que vous souhaitez désactiver à la fonction suivante ...

private void enableDisableView(View view, boolean enabled) {
    view.setEnabled(enabled);

    if ( view instanceof ViewGroup ) {
        ViewGroup group = (ViewGroup)view;

        for ( int idx = 0 ; idx < group.getChildCount() ; idx++ ) {
            enableDisableView(group.getChildAt(idx), enabled);
        }
    }
}

avec la référence suivante Existe-t-il un moyen de désactiver par programme tous les éléments d’un modèle spécifique?

12
Parag Chauhan

Pourquoi ne pas simplement faire setVisibility (View.GONE) sur la présentation elle-même, plutôt que de parcourir les enfants?

7
Michael

C’est peut-être en retard, mais vous pouvez simplement ajouter Android:duplicateParentState="true" dans l’enfant de la LinearLayout

Quelque chose comme ça:

 <LinearLayout
     Android:id="@+id/container"
     Android:layout_width="match_parent"
     Android:layout_height="wrap_content"
     Android:orientation="vertical">

     <TextView
         Android:id="@+id/textA"
         Android:layout_width="match_parent"
         Android:layout_height="wrap_content"
         Android:duplicateParentState="true"
         Android:text="First Text"/>

     <TextView
         Android:id="@+id/textB"
         Android:layout_width="match_parent"
         Android:layout_height="wrap_content"
         Android:duplicateParentState="true"
         Android:text="Second Text"/>

 </LinearLayout>
0
CLucera

Ajoutez simplement une autre mise en page transparente qui correspond à celle de la vue d'origine et changez la visibilité en visibilité lorsque vous souhaitez désactiver tous les enfants et pour permettre à ces enfants de modifier simplement la visibilité.

0
visionix visionix