Tôi đã cố gắng làm cho bố cục của mình hiệu quả hơn trong vài ngày nay bằng cách chuyển đổi từ việc sử dụng một số cấp độ lồng LinearLayouts
vào nhau RelativeLayout
và đã gặp một số vấn đề mà tôi không thể tìm ra giải pháp khắc phục ...
Tôi đã tìm kiếm nhóm người mới bắt đầu sử dụng Android và trang web này và không thể tìm thấy bất kỳ điều gì có thể giúp tôi giải quyết vấn đề.
Tôi đọc trên một trong những blog rằng bạn có thể kết hợp bố cục với hợp nhất và bao gồm thẻ. Vì vậy, những gì tôi có là một tệp bố cục chính với một RelativeLayout
phần tử gốc. Bên trong đó, tôi có 5 thẻ bao gồm tham chiếu đến 5 tệp bố cục xml khác nhau mà mỗi tệp có một phần tử hợp nhất cho gốc (tất cả các tệp hợp nhất của tôi đều giống nhau ngoại trừ id trong chúng).
Tôi đang gặp phải hai vấn đề, mà tôi sẽ giải thích sau khi đăng phiên bản đơn giản hóa mã bố cục của mình:
Tệp bố cục chính mẫu:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/translucent_gray" >
<include
android:id="@+id/running_gallery_layout_id"
layout="@layout/running_gallery_layout" />
<include
android:id="@+id/recent_gallery_layout_id"
layout="@layout/recent_gallery_layout"
android:layout_below="@id/running_gallery_layout_id" />
<include
android:id="@+id/service_gallery_layout_id"
layout="@layout/service_gallery_layout"
android:layout_below="@id/recent_gallery_layout_id" />
<include
android:id="@+id/process_gallery_layout_id"
layout="@layout/process_gallery_layout"
android:layout_below="@id/service_gallery_layout_id" />
</RelativeLayout>
Tệp hợp nhất bao gồm mẫu:
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<TextView
style="@style/TitleText"
android:id="@+id/service_gallery_title_text_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="left"
android:text="@string/service_title" />
<Gallery
android:id="@+id/service_gallery_id"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_below="@id/service_gallery_title_text_id" />
<TextView
style="@style/SubTitleText"
android:id="@+id/service_gallery_current_text_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/service_gallery_title_text_id"
android:layout_above="@id/service_gallery_id" />
</merge>
Tôi đang gặp phải hai vấn đề:
1) Các android:layout_*
thuộc tính dường như bị bỏ qua khi được sử dụng trong thẻ include và tất cả các bố cục đã hợp nhất được hiển thị chồng lên nhau. Theo bài đăng này ( http://developer.android.com/resources/articles/layout-tricks-reuse.html ) "bất kỳ android:layout_*
thuộc tính nào cũng có thể được sử dụng với <include />
thẻ"
2) Vì tôi không thể làm cho điều này hoạt động, tôi quyết định thử thêm một android:layout_below
thuộc tính vào TextView
mục đầu tiên trong mỗi tệp bố cục hợp nhất, có nghĩa là mỗi tệp hợp nhất sẽ tham chiếu đến một id từ tệp bố trí hợp nhất khác ... Đối với hầu hết các phần này thực sự đã hoạt động và bố cục của tôi trông ổn. Tuy nhiên, tôi gặp lỗi trên một trong các android:layout_below
thuộc tính nói rằng nó không thể tìm thấy id tôi đã chỉ định ... Tôi đã kiểm tra hai lần và ba lần các id để đảm bảo chúng đúng. Phần kỳ lạ nhất là tôi đã sử dụng AutoFill
tính năng để đặt id trong thuộc tính ngay từ đầu.
Nếu ai đó có bất kỳ đề xuất hoặc cách giải quyết nào, tôi sẽ rất vui khi dùng thử. Ngoài ra, nếu ai đó có thể nghĩ ra cách để tôi chỉ có một tệp bố cục xml hợp nhất thay vì 5 tệp sẽ được đánh giá cao. Tôi không thể tìm ra cách để làm điều đó vì tôi cần có quyền truy cập vào từng mục trong tệp bố cục hợp nhất trong thời gian chạy ...