2013-11-04 19 views
16

Câu hỏi này xuất phát từ việc hiển thị/ẩn các chế độ xem khác nhau một cách năng động. Chế độ xem có 3 cài đặt mức hiển thị - hiển thị, ẩn và đã biến mất. Nếu bạn có chế độ xem cha mẹ, ví dụ: LinearLayout, có một số chế độ xem con (không quan trọng chúng là gì) đang đặt chế độ hiển thị của cha mẹ giống như đặt độ hiển thị trên tất cả các con một cách độc lập không? Ví dụ nếu tôi nóiẢnh hưởng của việc đặt chế độ hiển thị chế độ xem cha mẹ đối với con của nó

LinearLayout container = (LinearLayout) findViewById(R.id.layout_1); 
container.setVisiblity(View.GONE); 

Đó có phải là giống như việc tìm kiếm từng xem con cá nhân và thiết lập tất cả những visiblities để View.GONE? Nếu cha mẹ không phải là View.GONE nhưng View.INVISIBLE thì sao? Có phải tất cả các trẻ em vẫn được vẽ nhưng không thấy?

Trả lời

30

Các hiệu lực thi hành là như nhau, nhưng nó không thực sự thiết sự hiện diện của tất cả các trẻ em. Nó sẽ không vẽ chúng.

Ví dụ:

  1. Set con để đi (mẹ có thể nhìn thấy, đứa trẻ đã biến mất)

  2. Set mẹ để đi (cả hai biến mất)

  3. Set mẹ để VISIBLE (có thể nhìn thấy cha mẹ, con vẫn bị mất, vì con đã được đặt rõ ràng trước đây)

  4. Đặt con thành CÓ THỂ (hiển thị cả hai)

Bất kỳ khi nào xem là KHÔNG THỂ, nó sẽ không vẽ hoặc con của nó. Nếu nó là GONE, nó cũng sẽ không dự trữ bất kỳ không gian bố trí nào cho họ. Nếu bạn kiểm tra các con của getVisibility() mặc dù, bạn sẽ thấy rằng nó vẫn được thiết lập để bất cứ điều gì nó đã được trước, ngay cả khi nó không được rút ra.

+0

Hành vi không có ý nghĩa đối với tôi, đặc biệt là vì nó khác khi làm việc từ lạm phát XML (tức là khả năng hiển thị được truyền cho trẻ em). Có cách giải quyết nào để làm cho nó nhất quán giữa XML và Java không? – milosmns

0

Bạn đúng trên tất cả các điểm :)

Đặt chế độ hiển thị bố cục thành GONE sẽ ẩn tất cả trẻ em. Việc đặt chế độ hiển thị bố cục thành INVISIBLE sẽ làm cho tất cả trẻ em vô hình nhưng vẫn được vẽ và chiếm không gian.

+0

Bạn có một liên kết đến bất cứ nơi nào trong tài liệu nó nói rằng? Tôi biết khi nào tôi đặt bố cục bố cục cho View.GONE, nó ẩn các trẻ em nhưng có làm "bẻ khóa" chúng hay chỉ làm cho chúng vô hình? – Rarw

0

Sử dụng chức năng đệ quy bên dưới để làm cho con bạn xem hiển thị hoặc đã biến mất.
Đối số đầu tiên là chế độ xem gốc và đối số thứ hai của bạn sẽ quyết định xem bạn có muốn hiển thị hoặc tắt chế độ xem cha mẹ hay không. đúng = nhìn thấy sai = đi

private void layoutElemanlarininGorunumunuDegistir(View view, boolean gorunur_mu_olsun) { 
    ViewGroup view_group; 
    try { 
     view_group = (ViewGroup) view; 
     Sabitler.konsolaYazdir(TAG, "View ViewGroup imiş!" + view.getId()); 
    } catch (ClassCastException e) { 
     Sabitler.konsolaYazdir(TAG, "View ViewGroup değilmiş!" + view.getId()); 
     return; 
    } 

    int view_eleman_sayisi = view_group.getChildCount(); 
    for (int i = 0; i < view_eleman_sayisi; i++) { 
     View view_group_eleman = view_group.getChildAt(i); 
     if (gorunur_mu_olsun) { 
      view_group_eleman.setVisibility(View.VISIBLE); 
     } else { 
      view_group_eleman.setVisibility(View.GONE); 
     } 
     layoutElemanlarininGorunumunuDegistir(view_group_eleman, gorunur_mu_olsun); 
    } 
} 
Các vấn đề liên quan