2012-04-02 28 views
11

Tôi có câu hỏi liên quan đến Hoạt động trên Android. Hoạt động có Phương thức addContentView(View) trong khi ViewGroup có phương thức (tương tự?) addView(View). Thật không may là không có giấy tờ của nó "nơi" các Xem từ addContentView được đặt. Có phải nó giống như một LinearLayout chỉ cần thêm Chế độ xem ở dưới cùng không? Nó có giống như một FrameLayout, bổ sung Chế độ xem của nó "onTop" không? Nó có phụ thuộc vào số ViewGroup được đặt bởi setContentView không? Nếu tôi đi sâu vào các nguồn tôi thấy rằng addContentView sẽ gọi Window 's Phương pháp trừu tượng addContentView. Đáng tiếc là tôi không thể thấy lớp nào đang triển khai phương thức này. Vậy hành vi của Hoạt động addContentView chính xác như thế nào?Activity.addContentView (Xem) == ViewGroup.addContentView (Xem)?

Trả lời

37

Bố cục cơ sở của mọi hoạt động là FrameLayout. Điều này có nghĩa là bố trí bạn thường đặt qua setContentView() là một phần tử con của bố cục này. addContentView() chỉ thêm một đứa trẻ khác, do đó, nó hoạt động như một FrameLayout(có nghĩa là nó thêm các phần tử giao diện người dùng mới bên trên các thành phần hiện tại).

Bạn có thể kiểm tra điều này bằng cách sử dụng công cụ có tên hierachyviewer từ thư mục ANDROID_SDK\tools của bạn. Dưới đây là hai ảnh chụp màn hình:

enter image description here

Đây là cách bố trí trước khi gọi addContentView(), hoạt động của tôi bao gồm các mặc định FrameLayout, cầm một LinearLayout với một nút (bố trí của tôi ở đây). Điều này được phản ánh trong hàng dưới cùng ở đây, các yếu tố khác ở trên là tiêu đề/thanh trạng thái.

enter image description here

Sau khi thêm một TextView qua addContentView() nó trông như thế này. Bạn có thể thấy rằng FrameLayout cơ bản có một đứa trẻ mới.

+3

Wow. Thực sự đánh giá cao câu trả lời của bạn, Cảm ơn. mẹo của bạn và công cụ bạn đề xuất sẽ giúp tôi tiết kiệm rất nhiều giờ! Bạn là loại người dùng khiến Stackoverflow trở nên tuyệt vời! –

+0

Câu trả lời hay! –

+1

+1 cho 'hierachyviewer' – RootCode