2011-03-04 154 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) 
相關問題