Android xml 错误: 使用 RelativeLayout (@id/LinearLayout_acc,@id/Progress sBar_statusScreen)“没有找到与给定名称匹配的资源”

好吧,我开始有点烦了。这个错误以一种非常特殊、非常不合逻辑的方式出现。

首先我要说的是,我已经看过关于这个错误的其他问题了,谷歌过了。据我所知,大多数类似的问题发生是因为人们引用了 String资源或者其他不在同一个布局文件中的东西,他们在“@id +”中放错了“ +”或者类似的东西。

我遇到的问题出现在布局中。一个带有 RelativeLayout的 xml 文件。它包含一个 TableLayout,两个包含一些文本的 LinearLayout,最后是一个 ProgressBar。我想要的是进度条与使用 android:layout_alignParentBottom="true"的相对布局对齐,然后在进度条上方对齐两个线性布局(底部线性布局在进度条上方对齐,另一个在底部线性布局上方对齐)。

它应该足够简单,看起来好像它的工作,即图形视图显示理想的结果。然而,对于 问题来了,Eclipse 在两个线性布局上给了我一个错误,

”错误: 没有找到与给定名称匹配的资源(在‘ lay_ above’处,值为‘@id/LinearLayout _ acc’)

对于其他线性布局,参考进度条的相同误差。我已经检查了三次以上,确保没有输入错误(在 packagename.R.java 中也存在 id) ,而且我已经尝试清理该项目十几次了。

在保存(和自动构建)时,我不会得到错误,直到我决定运行该项目。另一个奇怪的事情是,当我参考底部的线性布局从进度条,而不是顶部的线性布局,我没有得到错误!

我的布局文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/background_activity" >
<TableLayout
... />


<LinearLayout
android:id="@+id/LinearLayout_dist"
android:layout_above="@id/LinearLayout_acc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginBottom="10dp" >


<TextView
... />


<TextView
... />
</LinearLayout>


<LinearLayout
android:id="@+id/LinearLayout_acc"
android:layout_above="@id/ProgressBar_statusScreen"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true" >


<TextView
... />


<TextView
... />
</LinearLayout>


<ProgressBar
android:id="@+id/ProgressBar_statusScreen"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_margin="16dp" />


</RelativeLayout>

请帮助,我不知道是什么原因导致这个错误!

用答案编辑

Shrikant 提供了改变布局文件中外观顺序的解决方案,这样元素只引用读取引用时已经定义的其他元素。
此外,正如其他人已经发布的,将 @id/更改为 @+id/,即使在引用中,也会删除错误消息。正如 Marco W. 在 这个线程中所写的,问题是在第一次提到每个 id 时必须使用 @+id/,然后再使用 @id/,即使第一次可能不是定义。

我进行了大部分的设计,并在 Eclipse 的图形化编辑器中设置了引用的 id,因此会自动插入导致错误消息的代码。也许这是 Eclipse 中的一个 bug。

71341 次浏览

change

@id/LinearLayout_acc

to

@+id/LinearLayout_acc

Change every id @id to @+id, no matter when it's defining or referencing an id. With this, you won't get

Android xml error: “No resource found that matches the given name” with RelativeLayout (@id/LinearLayout_acc, @id/ProgressBar_statusScreen).

 <LinearLayout
android:id="@+id/LinearLayout_dist"
android:layout_above="@+id/LinearLayout_acc" <--- here might be a problem you forgot + sign
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginBottom="10dp" >

Please check the below code

<?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/ic_launcher" >


<TableLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content" />


<LinearLayout
android:id="@+id/LinearLayout_dist"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/LinearLayout_acc"
android:layout_centerHorizontal="true"
android:layout_marginBottom="10dp" >


<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="FIRST" />


<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="SECOND" />
</LinearLayout>


<LinearLayout
android:id="@+id/LinearLayout_acc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/ProgressBar_statusScreen"
android:layout_centerHorizontal="true" >


<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="THIRD" />


<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="FOURTH" />
</LinearLayout>


<ProgressBar
android:id="@+id/ProgressBar_statusScreen"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_margin="16dp" />


</RelativeLayout>

Also check the following link. It says that android:layout_below="@id/myTextView" won't recognise an element with id "myTextView" if it is written after the element you're using it in.