2010-07-07 32 views
26

Vì vậy, tôi đã tạo một lớp con Hoạt động có tên là CustomTitlebarActivity. Về cơ bản, mỗi hoạt động chính trong ứng dụng của tôi sẽ có thanh tiêu đề tùy chỉnh với nhiều tính năng phổ biến như nút Trang chủ, tiêu đề, nút tìm kiếm, v.v. Trong triển khai hiện tại của tôi, tôi vẫn sử dụng rõ ràng câu lệnh include trong XML bố cục cho mỗi CustomTitlebarActivity:Android có lập trình bao gồm bố cục (nghĩa là không có XML)

<include layout="@layout/titlebar" /> 

Có vẻ như tự nhiên tôi có thể thực hiện việc này trong CustomTitlebarActivity. Tôi có hai câu hỏi: Mã nào có thể thay thế thẻ bao gồm này và tôi nên đặt mã ở đâu? (Bản năng đầu tiên của tôi là đặt nó vào phương thức setContentView của CustomTitlebarActivity.)

Trên một lưu ý liên quan, tôi sẽ đánh giá cao những cách tốt hơn để sử dụng lại mã giao diện người dùng Android (ngay cả khi, mỗi lần, thanh tiêu đề cần thay đổi chút ít . hoạt động)

Trả lời

14

Cá nhân, tôi có lẽ muốn viết Activity lớp con của tôi để luôn setContentView vào một tập tin bố trí chứa một dọc fill_parentLinearLayout chỉ chứa thanh tiêu đề của tôi: -

<LinearLayout android:id="@+id/custom_titlebar_container" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
    <!--titlebar here--> 
</LinearLayout> 

Sau đó, tôi muốn xác định một bản tóm tắt getContentAreaLayoutId() đã gặp hod trong CustomTitlebarActivity trả về bố cục ID của nội dung bên dưới thanh tiêu đề cho từng phân lớp; cơ sở onCreate() của CustomTitlebarActivity sẽ sau đó chỉ cần gọi

setContentView(R.layout.custom_titlebar_activity_frame_from_above); 
View.inflate(this, getContentAreaLayoutId(), findViewById(R.id.custom_titlebar_container)); 

Ngoài ra, bạn có thể có phương pháp trừu tượng của bạn để nhận được khu vực nội dung trả về một View chứ không phải là một int, cho bạn linh hoạt hơn để xây dựng quan điểm của bạn tự động (nhưng buộc bạn để tự thổi phồng chúng trong đơn giản chỉ cần đổ bố cục XML này vào đây trường hợp).

+0

Cấu hình này đã thực hiện thủ thuật, tôi sẽ thử nghiệm nhiều hơn với nó. Bất kỳ ý tưởng tốt nào về cách cho phép sắp xếp các nút hành động khác nhau lên loại thanh tiêu đề này? –

+0

Điều đó phụ thuộc, nhưng nếu có một số lượng giới hạn tùy chỉnh khá có thể dự đoán được (một hoặc hai nút/hành động tùy chỉnh), tôi có thể gắn bó với "phương thức trừu tượng được ghi đè bởi các lớp con để có được hình ảnh để sử dụng và hành động một getFirstActionImageResourceId() trừu tượng, onFirstActionClicked()) và chỉ móc chúng vào trong onCreate() của lớp cơ sở. –

49

Tôi cũng gặp vấn đề này và tôi đã giải quyết ngay bây giờ. Tôi nghĩ rằng giải pháp của tôi là dễ dàng hơn:

  1. tạo inflater:

    LayoutInflater inflater = (LayoutInflater)  this.getSystemService(LAYOUT_INFLATER_SERVICE); 
    
  2. thổi phồng cách bố trí con:

    View childLayout = inflater.inflate(R.layout.child, 
          (ViewGroup) findViewById(R.id.child_id)); 
    
  3. thêm nó vào mẹ:

    parentLayout.addView(childLayout); 
    

Đã xong, hãy tận hưởng!

+1

Câu trả lời chính xác cho

+7

tôi nghĩ rằng nó phải là 'findViewById (R.id.child_id));' không 'R.layout.child_id' – Ranjit

+0

Khi tôi làm điều này chiều rộng không dường như ở lại như được định nghĩa trong bố cục. Không biết tại sao –

Các vấn đề liên quan