我已经尝试了几天,使我的布局更有效,从使用嵌套的 LinearLayouts
的几个层次转换为一个 RelativeLayout
,遇到了一些问题,我还没有能够找到一个解决办法..。
我已经搜索了 Android 初学者小组和这个网站,没有找到任何可以帮助我解决这个问题的东西。
我在一个博客上读到,你可以将布局、合并和包含标签结合起来。所以我有一个带有 RelativeLayout
根元素的主布局文件。其中有5个 include 标记,它们引用5个不同的 xml 布局文件,每个文件都有一个用于 root 的 merge 元素(除了 id 之外,所有的 merge 文件都是相同的)。
我遇到了两个问题,我会在发布一个简化版本的布局代码后解释:
示例主要布局文件:
<?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)当在 include 标签中使用时,android:layout_*
属性似乎被忽略了,并且所有合并的布局都显示在彼此之上。根据这篇文章(http://developer.android.com/resources/articles/layout-tricks-reuse.html)“任何 android:layout_*
属性都可以与 <include />
标签一起使用”
2)因为我不能得到这个工作,我决定尝试添加一个 android:layout_below
属性到每个合并布局文件中的第一个 TextView
项,这意味着每个合并文件将引用一个来自另一个合并布局文件的 id... 在大多数情况下,这实际上工作,我的布局看起来很好。然而,我得到了一个错误的 android:layout_below
属性说,它不能找到我指定的 id... 我有双重和三重检查的 id,以确保他们是正确的。最奇怪的部分是,我首先使用了 AutoFill
特性将 id 放在属性中。
如果任何人有任何建议或变通方法,我将非常乐意尝试他们。此外,如果任何人可以为我想出一种方法,只有一个合并 xml 布局文件,而不是5,将非常感谢。我找不到这样做的方法,因为我需要在运行时访问合并布局文件中的每个项目..。