Я пытаюсь в течение нескольких дней сделать мои макеты более эффективными, перейдя от использования нескольких уровней вложенных 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_*
, кажется, игнорируются при использовании в теге include, и все объединенные макеты отображаются друг на друга. Согласно этому сообщению (http://developer.android.com/resources/articles/layout-tricks-reuse.html)" любой атрибут android:layout_*
может использоваться с тегом <include />
2) Поскольку я не мог получить эту работу, я решил попробовать добавить атрибут android:layout_below
к первому элементу TextView
в каждом файле макета слияния, что означает, что каждый файл слияния будет ссылаться на идентификатор из другого макета слияния файл... По большей части это действительно сработало, и мой макет отлично выглядит. Тем не менее, я получаю сообщение об ошибке в одном из атрибутов android:layout_below
, говорящих, что он не может найти указанный мной идентификатор... У меня есть двойной и тройной флажки, чтобы убедиться, что они верны. Самая странная часть заключается в том, что я использовал функцию AutoFill
, чтобы поместить идентификатор в атрибут в первую очередь.
Если у кого-то есть предложения или способы обхода, я буду более чем счастлив попробовать их. Кроме того, если кто-нибудь может подумать о том, как мне просто иметь один файл слияния xml, вместо 5, который был бы весьма признателен. Я не мог найти способ сделать это, потому что мне нужно иметь доступ к каждому элементу в файлах макета слияния во время выполнения...