2011-03-04 156 views
0

我刚清理了我的.xml文件,并将每个文件的页眉和页脚元素外包。之后,我的项目遇到了错误,但只有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"> 

我无法想象它为什么在几乎所有的文件中都能正常工作,而不是在这两个文件中。它只是复制和粘贴,其余的都是一样的。

+0

您能否包含有错误的文件及其包含的文件? –

+1

请考虑标记答案是否正确。它对你和回答者都有好处,并鼓励他人在未来回答你的问题。 –

回答

0

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

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

我希望它能起作用。听起来合乎逻辑;) –

+0

它的工作,但我没有得到它为什么它在一些.xml文件和其他人不工作。现在我添加了id到每一个包含,它仍然工作 –

+0

是的,我也发现了,这是奇怪的。可能值得一个错误报告,但它很容易修复。 –

5

这一次真的把我很多的思考,终于结束了在....不可置信

我不得不使用的RelativeLayout具有完全相同的问题包括

在我的.xml文件的一部分中,我可以引用包含在id内的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> 

我看到,这在每个按字母顺序排列在layout_head.xml下的xml文件中都适用。所以我更名为layout_head.xml到aalayout_head.xml,当然切换到新的名称包括声明 - 等voila - 工程在每个文件...

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

Wierd enoug,但幸好它的工作现在完美无瑕。

BTW:任何想法,为什么当我用我的Android的布局没有工作:layout_below = “@ ID /小区1”?

+0

为我工作。谢谢!非常奇怪的bug ... – Ofir

+0

我在IntellijIDEA中遇到了同样的问题,这个技巧也解决了我的问题。 –

0

我试过johnnycube的答案,但它并没有为我解决它。问题结果是当<include>完成时aapt需要每个资源目录的-S参数。出于某种原因,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) 
相关问题