Как заставить RelativeLayout работать со слиянием и включением?

Уже несколько дней я пытаюсь сделать свои макеты более эффективными, конвертируя из нескольких вложенных уровней.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, это было бы очень полезно. Я не мог найти способ сделать это, потому что мне нужно иметь доступ к каждому элементу в файлах макета слияния во время выполнения ...

Ответы на вопрос(7)

Ваш ответ на вопрос