Просмотр перекрытия с помощью RelativeLayout на Android 1.5

У меня возникла проблема с перекрытием представлений в RelativeLayout на Android 1.5... Все работает нормально на Android 1.6 и выше.

Я понимаю, что в Android 1.5 есть некоторые проблемы с RelativeLayout, но я не смог найти ничего в StackOverflow или в группе для начинающих Android для моей конкретной проблемы.

Мой макет состоит из четырех разделов, каждый из которых состоит из TextView, Gallery и другого TextView, выровненного по вертикали:

Запущенные приложения
Недавние приложения
Службы
Процессы

Когда отображаются все четыре набора этих элементов, все работает нормально. Однако мое приложение позволяет пользователю указать, что некоторые из них не отображаются. Если пользователь отключает «Запущенные приложения», «Последние приложения» или «Службы», оставшиеся разделы внезапно перекрывают друг друга.

Вот мой код для макета. Я не уверен, что я делаю неправильно. Когда пользователь отключает отображение раздела, я использую параметр видимости View.GONE:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center_vertical"
    android:layout_gravity="center_vertical"
    android:background="@null"
>
<!-- Running Gallery View Items -->
<TextView 
    style="@style/TitleText"
    android:id="@+id/running_gallery_title_text_id"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="left"
    android:paddingLeft="1sp"
    android:paddingRight="10sp"
    android:text="@string/running_title"
/>

<Gallery
    android:id="@+id/running_gallery_id"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/running_gallery_title_text_id"
    android:spacing="5sp"
    android:clipChildren="false"
    android:clipToPadding="false"
    android:unselectedAlpha=".5"
/>

<TextView 
    style="@style/SubTitleText"
    android:id="@+id/running_gallery_current_text_id"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/running_gallery_id"
    android:gravity="center_horizontal"
/>

<!-- Recent Gallery View Items -->
<TextView 
    style="@style/TitleText"
    android:id="@+id/recent_gallery_title_text_id"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@id/running_gallery_current_text_id"
    android:gravity="left"
    android:paddingLeft="1sp"
    android:paddingRight="10sp"
    android:text="@string/recent_title"
/>

<Gallery
    android:id="@+id/recent_gallery_id"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/recent_gallery_title_text_id"
    android:spacing="5sp"
    android:clipChildren="false"
    android:clipToPadding="false"
    android:unselectedAlpha=".5"
/>

<TextView 
    style="@style/SubTitleText"
    android:id="@+id/recent_gallery_current_text_id"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/recent_gallery_id"
    android:gravity="center_horizontal"
/>

<!-- Service Gallery View Items -->
<TextView 
    style="@style/TitleText"
    android:id="@+id/service_gallery_title_text_id"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@id/recent_gallery_current_text_id"
    android:gravity="left"
    android:paddingLeft="1sp"
    android:paddingRight="10sp"
    android:text="@string/service_title"
/>

<Gallery
    android:id="@+id/service_gallery_id"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/service_gallery_title_text_id"
    android:spacing="5sp"
    android:clipChildren="false"
    android:clipToPadding="false"
    android:unselectedAlpha=".5"
/>

<TextView 
    style="@style/SubTitleText"
    android:id="@+id/service_gallery_current_text_id"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/service_gallery_id"
    android:gravity="center_horizontal"
/>
</RelativeLayout>

Я пропустил xml для раздела «Процессы» в (несколько тщетной) попытке сделать это короче...

Что я могу сделать, чтобы это работало в Android 1.5? Я не думаю, что это просто вопрос изменения порядка представлений в xml, потому что он отлично работает, когда отображается все.


person Justin    schedule 04.04.2010    source источник


Ответы (1)


Два возможных решения:

  • Попробуйте установить высоту элемента на 0 или 1 пиксель и видимость на INVISIBLE вместо GONE.
  • Оберните каждую галерею/текстовый вид в LinearLayout, для которого установлено значение wrap_height, и установите выше/ниже в макетах вместо подвидов. Затем установите подэлементы в View.GONE, оставив линейные макеты, используемые для относительного позиционирования, все еще видимыми, но с завернутой высотой 0.

Идея любого решения состоит в том, чтобы убедиться, что вы никогда не позиционируете что-либо относительно представления, которое является View.GONE; Я подозреваю, что это источник ошибки, с которой вы столкнулись.

Однако, если я могу спросить ... зачем вам вообще нужно использовать RelativeLayout здесь? Из того, что я вижу с первого взгляда, все здесь прекрасно вписывается в вертикальный LinearLayout, и на самом деле кажется концептуально более простым для такого расположения.

person Yoni Samlan    schedule 04.04.2010
comment
Спасибо за ваши предложения... Я попробую. Это мой макет для портретного режима... С альбомным режимом все становится немного сложнее и потребует несколько вложенных LinearLayouts. Хотя я мог бы использовать LinearLayout в портретном режиме, у меня все еще есть та же проблема в ландшафтном режиме. - person Justin; 05.04.2010