2011-10-07 12 views
16

Belirli bir düzendeki tüm çocukların programlanması yolu var mı?LinearLayout'taki tüm çocuklar nasıl devre dışı bırakılır/etkinleştirilir

Örneğin ben iki çocuklu bu düzeni vardır:

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

ve ben böyle bir şey yapmak istiyorum: iki textViews devre dışı bırakmak amacıyla

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

.

Nasıl bir fikir?

cevap

26

LinearLayout, ViewGroup'u genişletir, böylece LinearLayout çocuklarınızda yinelemek ve bunlarla ne yapmak isterseniz getChildCount() ve getChildAt (index) yöntemlerini kullanabilirsiniz. Etkinleştir/devre dışı bırak yöntemiyle ne kastettiğinizden emin değilim, ancak bunları gizlemeye çalışıyorsanız, setVisibility (View.GONE);

Yani, böyle bir şey görünecektir:

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

SetVisibility kullanmadan (View.GONE), LinearLayout'taki tüm çocukların Android'de devre dışı bırakılması/devre dışı bırakılması mümkündür –

+0

İç içe geçmiş için nasıl yapabilirim? Layout @ SBerg413 – Prabs

7

Neden sadece, daha doğrusu çocukların yineleme daha düzen kendisinde setVisibility (View.GONE) yapmıyor?

+0

Diğerlerini içeren özel bir görünümünüz olabilir. gümrük görünümleri. Özel görünümünüzde asılı rastgele görünümleri gizlemek isteyebilirsiniz, ancak özel görünümdeki görünümleri gizlemeyebilirsiniz. Örneğin kütüphanelerde oldukça yaygındır. Özel görünümü gizlerseniz, yalnızca kitaplığınızın kullanıcıları tarafından eklenen childs değil, her şeyi saklıyorsunuz. – Sotti

12

Ayrıca devre dışı bırakabilir/... setVisibility()

sonra aşağıdaki işlevi içine devre dışı istediğiniz görünümü geçmesi için CheckBox bir View.OnClickListener ekle kullanmadan etkinleştirmek

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

Aşağıdaki referans ile Is there a way to disable all the items in a specific layout programmaticaly?

+5

http://stackoverflow.com/a/5257691/953010 adresinden gelen açık kopya, en azından kredi vermiş olabilirsiniz. – PureSpider

0

Sadece orijinal görünümü eşleşecek ve tüm çocukları devre dışı bırakmak ve daha sonra sadece çocukları etkinleştirmek istediğinizde görünürlüğü görünürlük olarak değiştirecek başka bir şeffaf düzen ekleyin. nge görünürlük gitmiş

+0

Size verdiğiniz çözüm hakkında biraz daha fazla açıklama ekleyerek daha fazla cevabınızı hazırlayabilir misiniz? – abarisone

+0

Burada kontrol edebilirsiniz http://stackoverflow.com/questions/10480560/how-to-disable-any-event-on-a-view-in-android –