2011-12-08 41 views
5

Tôi nhận được RelativeLayout mà tôi có các điều khiển ở trên cùng. Vào thời gian chạy, tôi muốn hiển thị MapView được thêm vào Bố cục, ẩn tất cả các Chế độ xem khác bên dưới, nhưng không hiển thị các điều khiển ở trên cùng. Sau đó, MapView bị ẩn lần nữa.Tại sao view.bringToFront() doenst hoạt động?

layout_main.bringChildToFront(layout_main.findViewWithTag("paramsUI")); 
layout_main.invalidate(); 

Điều findViewByTag dường như hoạt động, tôi đã kiểm tra ở chế độ Gỡ lỗi. Tôi cũng đã thử:

layout_main.findViewWithTag("paramsUI").bringToFront(); 

Tôi có điều gì khác mà tôi phải làm?

Chỉnh sửa: Xin lỗi, vấn đề là, MapView ẩn thanh điều khiển, phải ở trên cùng của tất cả các chế độ xem, vì lệnh gọi hàm bringToFront().

+0

Sự cố là gì? 'MapView' không biến mất? Hoặc các điều khiển không nằm trên đầu trang của 'MapView'? – kaspermoerch

Trả lời

0

Bạn chỉ có thể quấn RelativeLayout trong LinearLayout và cũng đặt các điều khiển trong LinearLayout. Bằng cách này bất cứ điều gì bạn làm cho RelativeLayout, các điều khiển sẽ được sử dụng tốt.

+0

Điều này có vẻ cẩu thả, nhưng nó là giải pháp duy nhất tôi chưa đưa ra được rằng các công trình hoàn hảo. –

0

Bạn có thể cân nhắc sử dụng FrameLayout thay vì RelativeLayout. Một RelativeLayout là nhiều hơn cho một phần lượt xem, trong khi các FrameLayout được tối ưu hóa cho các ứng dụng toàn màn hình. Bằng cách này, bạn có thể kiểm soát nơi các mục được vẽ.

Từ FrameLayout documentation:

quan điểm Child được rút ra trong một chồng, với con thêm gần đây nhất trên hàng đầu. Kích thước của FrameLayout là kích thước của con lớn nhất của nó (cộng với padding), có thể nhìn thấy hay không (nếu cha mẹ của FrameLayout cho phép). Các lượt xem được GONE được sử dụng để định kích thước chỉ khi setConsiderGoneChildrenWhenMeasuring() được đặt thành true.

Tôi hy vọng điều này sẽ hữu ích! Hãy cho tôi biết nếu bạn có thêm câu hỏi.

+2

Chăm sóc để chia sẻ lý do bạn downvoted? – Codeman

0

Đối với Android 4.x, bạn cần phải gọi requestLayout() giữa hai cuộc gọi của bạn:

layout_main.bringChildToFront(layout_main.findViewWithTag("paramsUI")); 
layout_main.requestLayout(); 
layout_main.invalidate(); 
0

Bạn có thể thử mã này. Dường như hoạt động trên các phiên bản cũ và mới của Android

if (android.os.Build.VERSION.SDK_INT >= 21) //Lollipop 
{ 
    view.setZ(5); 

    for (int i = 0; i < view.getParent().getChildCount(); i++) 
    { 
     if(view != view.getParent().getChildAt(i)) 
     { 
      view.getParent().getChildAt(i).setZ(4); 
     } 
    } 
} 

view.bringToFront(); 
for (int i = 0; i < view.getParent().getChildCount(); i++) 
{ 
    view.getParent().getChildAt(i).invalidate(); 
} 
view.getParent().requestLayout(); 
view.getParent().invalidate(); 
Các vấn đề liên quan