2011-10-07 8 views
16

Có cách nào bằng cách lập trình rằng tất cả trẻ em của bố cục nhất định không?Cách tắt/bật tất cả trẻ em trên LinearLayout trong Android

Ví dụ tôi có bố trí này với hai đứa con:

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

và tôi muốn làm một cái gì đó như:

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

Để vô hiệu hóa hai TextView.

Bất kỳ ý tưởng nào?

Trả lời

26

Một LinearLayout mở rộng ViewGroup, vì vậy bạn có thể sử dụng các phương thức getChildCount() và getChildAt (index) để lặp qua các con LinearLayout của bạn và làm bất cứ điều gì bạn muốn với chúng. Tôi không chắc chắn những gì bạn có nghĩa là bằng cách kích hoạt/vô hiệu hóa, nhưng nếu bạn chỉ cố gắng để ẩn chúng, bạn có thể làm setVisibility (View.GONE);

Vì vậy, nó sẽ giống như thế này:

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

Nếu không sử dụng setVisibility (View.GONE), nó có thể tắt/bật tất cả trẻ em trên LinearLayout trong Android –

+0

Làm thế nào để làm điều đó cho Layout lồng nhau @ SBerg413 – Prabs

7

Tại sao không chỉ làm setVisibility (View.GONE) trên cách bố trí riêng của mình, chứ không phải lặp lại thông qua những đứa trẻ?

+0

Bạn có thể có một cái nhìn tùy chỉnh chứa một số khác quan điểm hải quan. Bạn có thể muốn ẩn các chế độ xem ngẫu nhiên treo trên chế độ xem tùy chỉnh của bạn chứ không phải chế độ xem trong chế độ xem tùy chỉnh. Nó khá phổ biến trên các thư viện chẳng hạn. Nếu bạn ẩn chế độ xem tùy chỉnh, bạn sẽ ẩn tất cả mọi thứ, không chỉ các con được người dùng trong thư viện thêm vào. – Sotti

12

Bạn cũng có thể tắt/bật mà không sử dụng setVisibility()

Thêm một View.OnClickListener để CheckBox của bạn sau đó vượt qua Xem bạn muốn được vô hiệu hóa thành các chức năng sau đây ...

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

với tham chiếu sau Is there a way to disable all the items in a specific layout programmaticaly?

+5

Bản sao trắng trợn từ http://stackoverflow.com/a/5257691/953010, ít nhất bạn cũng có thể nhận được tín dụng. – PureSpider

0

Chỉ cần thêm một bố cục trong suốt khác sẽ khớp với bố cục của chế độ xem gốc và thay đổi chế độ hiển thị thành hiển thị khi bạn muốn vô hiệu hóa tất cả trẻ em và bật trẻ em nge tầm nhìn để đi

+0

Bạn có thể vui lòng xây dựng thêm câu trả lời của bạn thêm mô tả chi tiết hơn về giải pháp bạn cung cấp không? – abarisone

+0

bạn có thể kiểm tra tại đây http://stackoverflow.com/questions/10480560/how-to-disable-any-event-on-a-view-in-android –