2017-07-26 54 views
5

我正在构建一个简单的待办事项列表应用程序。我试图通过相互定位来组织我的布局。我通过调用像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' 
} 

回答

10

变化

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> 
+2

非常感谢。有效!!! –

+1

谢谢,伙计。眼睛打开:) –

6

Phan Van Linh的回答是正确的,但这里的为什么这是正确的。

当您编写@+id/foo时,您的意思是“使用id foo,如果它不存在,则创建它”。当你写@id/foo时,你会说“使用id foo”。如果该ID不存在,这是一个错误(就像引用一个你没有声明的Java变量一样)。

它“作品”如果你把你的布局顺序相反的是,现在你<Button android:id="@+id/foo">标签至上,所以当正在处理的文件,处理<ListView android:layout_above="@id/foo">之前的ID foo创建的原因。实际上,如果你交换了两个视图,建立你的项目,然后将它们交换回原来的顺序,你会发现它的仍然是的作品。这是因为生成的R.java文件是增量构建的,所以id foo从最后一个版本开始。

但是,如果你干净地重建你的项目,问题会回来(因为R.java被销毁并重新生成)。

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

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

相关问题