Я вже кілька днів намагаюся зробити свої схеми ефективнішими, перетворивши з використання декількох рівнів вкладених LinearLayouts
на один RelativeLayout
і зіткнувшись з декількома проблемами, які я не зміг знайти вирішення проблеми ...
Я здійснив пошук групи початківців Android та цього сайту і не зміг знайти нічого, що допомогло б мені вирішити проблему.
Я читав на одному з блогів, що ви можете комбінувати макети зі злиттям і включати теги. Отже, у мене є основний файл компонування з RelativeLayout
кореневим елементом. Всередині мене є 5 тегів, які посилаються на 5 різних файлів компонування xml, у кожному з яких є елемент злиття для кореня (усі мої файли злиття однакові, за винятком ідентифікаторів у них).
У мене виникають дві проблеми, які я поясню після публікації спрощеної версії коду макета:
Файл основного макета зразка:
<?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>
Зразок файлу злиття:
<?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>
У мене виникають дві проблеми:
1) android:layout_*
Атрибути, здається, ігноруються при використанні в тезі включення, і всі об'єднані макети відображаються один над одним. Відповідно до цієї публікації ( http://developer.android.com/resources/articles/layout-tricks-reuse.html ) "будь-який android:layout_*
атрибут можна використовувати з <include />
тегом"
2) Оскільки я не зміг це зробити, я вирішив спробувати додати android:layout_below
атрибут до першого TextView
елемента у кожному файлі макета злиття, тобто кожен файл злиття посилається на ідентифікатор з іншого файлу макета злиття ... Здебільшого це насправді працював, і моя компонування виглядає чудово. Однак я отримую помилку в одному з android:layout_below
атрибутів, кажучи, що він не може знайти ідентифікатор, який я вказав ... Я двічі та потрійно перевірив ідентифікатори, щоб переконатися, що вони правильні. Найбільш дивна частина полягає в тому, що я використовував цю AutoFill
функцію, щоб поставити ідентифікатор в атрибут на перше місце.
Якщо у когось є якісь пропозиції чи способи вирішення, я буду більш ніж радий спробувати їх. Крім того, якщо хтось може придумати спосіб для мене просто один файл злиття xml-макета замість 5, це було б дуже вдячно. Я не міг знайти спосіб це зробити, тому що мені потрібно мати доступ до кожного елемента файлів макета злиття під час виконання ...