在简单的Android应用程序中获取有关布局xml文件的错误

时间:2016-10-07 17:33:54

标签: android xml

所以我尝试了以下代码

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.slidenerd.sample.customdesign.MainActivity"
    android:background="#252525">


    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:srcCompat="@drawable/clock"
        android:layout_above="@id/textView"
        android:id="@+id/imageView"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true" />

    <TextView
        android:text="0:00"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/textView"
        android:textColor="#616161"
        android:textSize="100sp"
        android:layout_centerInParent="true" />

    <ToggleButton
        android:text="ToggleButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textView"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="54dp"
        android:id="@+id/toggleButton"
        android:background="@drawable/toggle_selector"
        android:textOff=""
        android:textOn=""/>
</RelativeLayout>

我得到的错误是这些

Information:Gradle tasks [:app:clean, :app:generateDebugSources, :app:generateDebugAndroidTestSources, :app:mockableAndroidJar, :app:prepareDebugUnitTestDependencies, :app:assembleDebug]
E:\AndroidProjects\Tutorials\CustomDesign\app\src\main\res\layout\activity_main.xml
Error:(17, 31) No resource found that matches the given name (at 'layout_above' with value '@id/textView').
E:\AndroidProjects\Tutorials\CustomDesign\app\build\intermediates\res\merged\debug\layout\activity_main.xml
Error:(17, 31) No resource found that matches the given name (at 'layout_above' with value '@id/textView').
Error:Execution failed for task ':app:processDebugResources'.
> com.android.ide.common.process.ProcessException: Failed to execute aapt
Information:BUILD FAILED
Information:Total time: 21.791 secs
Information:3 errors
Information:0 warnings
Information:See complete output in console

相反,以下工作正常

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.slidenerd.sample.customdesign.MainActivity"
    android:background="#252525">


    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:srcCompat="@drawable/clock"
        android:layout_marginTop="54dp"
        android:id="@+id/imageView"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true" />

    <TextView
        android:text="0:00"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/imageView"
        android:id="@+id/textView"
        android:textColor="#616161"
        android:textSize="100sp"
        android:layout_centerInParent="true" />

    <ToggleButton
        android:text="ToggleButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textView"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="54dp"
        android:id="@+id/toggleButton"
        android:background="@drawable/toggle_selector"
        android:textOff=""
        android:textOn=""/>
</RelativeLayout>

我不明白为什么第一个不起作用。根据放置在布局中心的项目排列各种项目是不对的。

2 个答案:

答案 0 :(得分:2)

  

找不到与给定名称匹配的资源(位于&#39; layout_above&#39; with   价值&#39; @ id / textView&#39;)。

它试图告诉您,您正在使用尚未初始化的ID。为了避免这种情况,只要你指定&#34; android:layout_above =&#34; @ + id / textView&#34;就可以使用第一个布局。 (&#34; +&#34;需要在@ + id中存在)

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:srcCompat="@drawable/clock"
        android:layout_above="@id/textView"   <-- this guy
        android:id="@+id/imageView"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true" />

答案 1 :(得分:1)

因为在第一行 android:layout_above =“@ id / textView”

<ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:srcCompat="@drawable/clock"
        android:layout_above="@id/textView"
        android:id="@+id/imageView"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true" />

指的是尚未从xml解析器读取的元素(textview)。只需更改顺序:(首先是textview然后是xml中的imageview)

P.S。:tools:context="com.slidenerd.sample.customdesign.MainActivity"是不必要的,因为那不是你的项目