"找不到与给定名称匹配的资源"即使名称匹配也会出错

时间:2017-07-26 03:03:54

标签: android xml gradle

我正在构建一个简单的待办事项列表应用。我试图通过将它们相对于彼此定位来组织我的布局。我通过调用android:layout_toStartOf="@id/to_do_btn"之类的XML属性来做到这一点,但是我遇到了No Resource Found That Matches The Given Name错误。我基本上尝试了Stackoverflow上的每个解决方案但没有任何帮助。这是我的XML:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="myapp.onur.todo.MainActivity">

    <ListView
        android:id="@+id/to_do_list"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_alignParentStart="true"
        android:layout_above="@id/to_do_btn"
        android:layout_margin="5dp"
        >
    </ListView>

    <EditText
        android:id="@+id/to_do_editText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="Enter Something To Do"
        android:layout_toStartOf="@id/to_do_btn"
        android:layout_alignParentBottom="true"
        android:layout_alignParentStart="true"
        android:layout_alignTop="@id/to_do_btn"
        android:layout_below="@id/to_do_list"
        android:layout_margin="5dp"
        />

    <Button
        android:id="@+id/to_do_btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="add item"
        android:layout_margin="5dp"
        android:layout_alignParentBottom="true"
        android:layout_alignParentEnd="true"
        />

</RelativeLayout>

这是错误的示例:Error:(15, 31) No resource found that matches the given name (at 'layout_above' with value '@id/to_do_btn').

我不知道发生了什么。如果它有帮助,这是我的gradle依赖项:

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:26.0.0-alpha1'
}

3 个答案:

答案 0 :(得分:15)

更改

android:layout_above="@id/to_do_btn"

android:layout_above="@+id/to_do_btn"

按此顺序排列您的布局

<Button
        android:id="@+id/to_do_btn"
        ...
        />

<ListView
        ...
        android:layout_above="@id/to_do_btn"
        >
</ListView>

答案 1 :(得分:11)

Phan Van Linh的回答是正确的,但

当您撰写@+id/foo时,您正在说&#34;使用ID foo,如果它不存在则创建它{&#t}。当您撰写@id/foo时,您说&#34;使用ID foo&#34;。如果该id不存在,则这是一个错误(就像引用您尚未声明的Java变量一样)。

它&#34;工作的原因&#34;如果您按照相反的顺序放置布局,那么现在您的<Button android:id="@+id/foo">标记首先出现,因此在处理文件时,会在foo处理之前创建标识<ListView android:layout_above="@id/foo">

事实上,如果您交换两个视图,构建项目,然后将它们交换回原始顺序,您就会发现它仍然有效。这是因为生成的R.java文件是以增量方式构建的,因此id foo会在上一次构建时保持不变。

但是如果你对项目进行了一次干净的重建,那么问题就会出现(因为R.java被破坏并重新生成)。

答案 2 :(得分:0)

当我试图运行

时,我遇到了类似的问题
<TextView
    android:id="@+id/text3"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:text="Thanks for your friendship"
    android:fontFamily="casual"
    android:textColor="@android:color/white"
    android:textSize="27sp"
    android:layout_centerHorizontal="true"
    android:layout_above="@id/text4"/>

<TextView
    android:id="@+id/text4"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Signed: Kingsley"
    android:fontFamily="casual"
    android:textColor="@android:color/white"
    android:textSize="36sp"
    android:layout_alignParentRight="true"
    android:layout_alignParentBottom="true"
    android:paddingRight="8dp"/>

解决方案是简单地重新排序文本视图。