Просмотр перекрытия с помощью RelativeLayout на Android 1.5 - PullRequest
4 голосов
/ 04 апреля 2010

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

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

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

1 Ответ

4 голосов
/ 04 апреля 2010

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

  • Попробуйте установить высоту элемента равной 0 или 1 px, а видимость - НЕВИДИМОЙ вместо УЖЕ.
  • Оберните каждую галерею / TextView в LinearLayout, установленном на wrap_height, и установите выше / ниже для макетов вместо подпредставлений. Затем установите для подэлементов значение View.GONE, оставляя линейные макеты, используемые для относительного позиционирования, все еще видимыми, но с обернутой высотой 0.

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

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

...