我正在构建一个简单的待办事项列表应用。我试图通过将它们相对于彼此定位来组织我的布局。我通过调用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'
}
答案 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)
当您撰写@+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"/>
解决方案是简单地重新排序文本视图。