2017-07-26 93 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"/> 

的解決方案是簡單地重新排列文本視圖。

相關問題