包含并不包含任何内容

时间:2011-03-04 23:39:44

标签: android xml include

我刚刚清理了我的.xml文件,并将每个文件的页眉和页脚元素外包。之后我的projekt遇到了错误,但只有8个文件中的2个。

旧代码:

<ImageView
android:layout_width =                      "wrap_content"
android:id =                                "@+id/ImageView01"
android:layout_height =                     "60dp"
android:src =                               "@drawable/logo"
android:scaleType =                         "fitXY">

和新代码:

<include layout="@layout/header" /

错误显示“找不到与给定名称匹配的资源('layout_below',值为'@id / searchRelativeLayout')

<LinearLayout 
    android:id =                        "@+id/SearchRelativeLayout"
    android:layout_width =              "fill_parent"
    android:layout_height =             "wrap_content"
    android:orientation =               "horizontal"
    android:layout_below =              "@id/ImageView01"
    android:gravity =                   "center"
    android:layout_marginTop =          "5dip"
    android:paddingRight =              "5dip"
    android:paddingLeft =               "5dip">

我无法想象为什么它几乎适用于所有文件但不适用于这两种文件。它只是复制和粘贴,其余的都是一样的。

3 个答案:

答案 0 :(得分:5)

这个真的让我想了很多,终于不相信......

使用 RelativeLayout 包含

时,我遇到了完全相同的问题

在我的.xml文件的一部分中,我可以引用include中的id。在其他人没有。

layout_head.xml包含要包含的布局。我使用了以下声明:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent" style="@style/ETActivity">

<include android:id="@+id/cell1" layout="@layout/aalayout_head" />

<ListView android:id="@+id/main_list" android:layout_width="fill_parent"
    android:layout_height="wrap_content"     android:layout_below="@id/layout_spacer" />

</RelativeLayout>

我看到这适用于每个xml文件,该文件按字母顺序排列在layout_head.xml下面。所以我将layout_head.xml重命名为aalayout_head.xml ,当然将include语句切换为新名称 - et voila - 适用于每个文件......

似乎是Eclipse插件而不是Android系统本身的问题。

Wierd enoug但幸运的是它现在正在完美地工作。

顺便说一下:当我使用android时,我知道为什么我的布局不起作用:layout_below =“@ id / cell1”?

答案 1 :(得分:0)

您可能正在使用RelativeLayout将标题放在标题栏下方。您还需要在<include />标记上添加ID,因为它不会在包含内查找ID。奇怪的问题,但一个简单的解决方法:

<include 
    layout="@layout/header" 
    android:id="@+id/ImageView01" />

答案 2 :(得分:0)

我尝试过johnnycube的答案,但它没有为我解决。问题最终是aapt在完成-S时需要为每个资源目录提供<include>参数。出于某种原因,ADT不会使这种情况正常发生。此外,当使用多个-S时,aapt需要--auto-add-overlay。毋庸置疑,ADT不支持修改aapt命令,因此我最终编写了一个围绕aapt的包装器来检测情况并添加-S <dir> --auto-add-overlay。脚本如下。您需要修改KEY以检测您正在修改的项目,并DIR作为图书馆项目的/res/目录的相对链接。

#!/usr/bin/env python
KEY=r'name-of-your-directory'
DIR='/../../path/to/your/include/res/'

import os
import re
import sys

mydir = os.path.dirname(os.path.realpath(__file__))
real_aapt = "%s/%s" % (mydir,"aapt-real")
#args = sys.argv[1:]
args = sys.argv

found=False
nextisdir=False
newargs=[]
for arg in args:
    if re.search(KEY,arg):
        found=True
    if nextisdir:
        nextisdir=False
        newargs.append("--auto-add-overlay")
        newargs.append("-S")
        newargs.append(arg+DIR)
    if found and arg == '-S':
        nextisdir=True

os.execv(real_aapt,args+newargs)