我刚刚清理了我的.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">
我无法想象为什么它几乎适用于所有文件但不适用于这两种文件。它只是复制和粘贴,其余的都是一样的。
答案 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)