4

我在 Android 1.5 上的 RelativeLayout 中的视图重叠时遇到问题……在 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 中的视图的问题,因为它在显示所有内容时都可以正常工作。

4

1 回答 1

4

两种可能的解决方案:

  • 尝试将元素的高度设置为 0 或 1 px,并将可见性设置为 INVISIBLE 而不是 GONE。
  • 将每个 Gallery/TextView 包装在一个设置为 wrap_height 的 LinearLayout 中,并在布局而不是子视图上设置上/下。然后将子元素设置为 View.GONE,使用于相对定位的线性布局仍然可见,但包裹高度为 0。

任何一种解决方案的想法都是确保您永远不会相对于 View.GONE 的视图定位某些东西;我怀疑这是您遇到的错误的根源。

但是,如果我可能会问...为什么您甚至需要在这里使用RelativeLayout?从我一眼看去,这里的一切都可以很好地融入垂直线性布局,事实上,这种安排在概念上似乎更简单。

于 2010-04-04T18:18:14.193 回答