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?
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.
}
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?
Pourquoi ne pas simplement faire setVisibility (View.GONE) sur la présentation elle-même, plutôt que de parcourir les enfants?
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>
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é.