92

好的,所以这开始让我很恼火。这个错误以一种非常特殊、不太合乎逻辑的方式弹出。

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

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

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

“错误:未找到与给定名称匹配的资源(在 'layout_above' 处,值为 '@id/LinearLayout_acc')。”

以及其他线性布局参考进度条的相同错误。我已经检查了三次以上,没有错别字(ID 也存在于 packagename.R.java 中),并且我已经尝试清理该项目十几次。

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

我的布局文件:

<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 中的一个错误。

4

4 回答 4

85

改变

@id/LinearLayout_acc

@+id/LinearLayout_acc
于 2012-07-26T11:56:55.143 回答
77

请检查以下代码

<?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>

另请检查以下链接。它说 android:layout_below="@id/myTextView" 将无法识别 ID 为“myTextView”的元素,如果它是在您使用它的元素之后编写的。

于 2012-07-26T12:41:56.850 回答
15

将每个 id 更改@id@+id,无论何时定义或引用一个 id。有了这个,你不会得到

Android xml 错误:“未找到与给定名称匹配的资源”和 RelativeLayout(@id/LinearLayout_acc、@id/ProgressBar_statusScreen)。

于 2012-07-26T11:58:57.997 回答
2
 <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" >
于 2012-07-26T12:02:53.590 回答