2011-10-07 26 views
16

È possibile programmare tutti i bambini di un determinato layout?Come disabilitare/abilitare tutti i bambini su LinearLayout in Android

Per esempio io ho questo layout con due figli:

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

e voglio fare qualcosa di simile:

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

Per disabilitare i due textviews.

Qualche idea di come?

risposta

26

Un LinearLayout estende ViewGroup, quindi è possibile utilizzare i metodi getChildCount() e getChildAt (indice) per scorrere i figli LinearLayout e fare tutto ciò che si desidera. Non sono sicuro di cosa intendi per attivazione/disattivazione, ma se stai solo cercando di nasconderli, puoi impostare setVisibility (View.GONE);

Quindi, sarebbe simile a questa:

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

Senza usare setVisibility (View.GONE), è possibile disabilitare/abilitare tutti i bambini su LinearLayout in Android –

+0

Come farlo per Layout nidificato @ SBerg413 – Prabs

7

Perché non basta fare il setVisibility (View.GONE) sul layout stesso, piuttosto che scorrendo i bambini?

+0

È possibile che si disponga di una vista personalizzata contenente qualche altro viste doganali. Potresti voler nascondere le viste casuali che si appendono alla tua vista personalizzata ma non le viste nella vista personalizzata stessa. Ad esempio, è piuttosto comune nelle biblioteche. Se si nasconde la vista personalizzata si nasconde tutto, non solo i child aggiunti dagli utenti della libreria. – Sotti

12

È inoltre possibile disabilitare/abilitare senza utilizzare setVisibility()

Aggiungi un View.OnClickListener al CheckBox quindi passare la vista che si desidera essere disabilitato nel seguente funzione ...

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); 
     } 
    } 
} 

con il riferimento seguente Is there a way to disable all the items in a specific layout programmaticaly?

+5

Copia sfacciata da http://stackoverflow.com/a/5257691/953010, potresti almeno aver dato credito. – PureSpider

0

Basta aggiungere un altro layout trasparente che corrisponda a par_parent della vista originale e cambiarne la visibilità in visibile quando si desidera disabilitare tutti i bambini e abilitare i bambini quindi solo cha nge visibility to gone

+0

Potresti per favore elaborare più la tua risposta aggiungendo un po 'più di descrizione della soluzione che fornisci? – abarisone

+0

puoi controllare qui http://stackoverflow.com/questions/10480560/how-to-disable-any-event-on-a-view-in-android –

Problemi correlati