2012-03-02 14 views
6

Lo siento porque mi título es similar a muchos otros en StackOverFlow pero ninguna de esas soluciones cumple con mi problema.Error de Android: debe proporcionar el atributo layout_width

Estoy diseñando un uso de diseño Relative Layout. Después del diseño en la vista de código, cuando cambio a la vista gráfica, Eclipse nota:

Debe suministrar un atributo layout_width.

Debe suministrar un atributo layout_height.

. Cuando ejecuto este programa, se dará cuenta de error en LogCat

Causado por: java.lang.RuntimeException: Línea de archivo XML binario # 2: Usted debe proporcionar un atributo layout_width.

Aquí está mi archivo XML:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

    <TextView 
     android:id="@+id/contact_name" 
     android:text="Sam" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentLeft="true" 
     android:layout_marginLeft="20dp" 
     android:layout_marginTop="20dp" 
     android:textSize="20dp"/> 

    <TextView 
     android:id="@+id/contact_phone" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textSize="10dp" 
     android:text="39256493" 
     android:layout_below="@+id/contact_name" 
     android:layout_alignLeft="@+id/contact_name" 
     android:layout_marginTop="5dp"/>   

</RelativeLayout> 
+0

Eso XML parece correcto - este es el único diseño XML que tiene ? Verifique los otros para asegurarse de que el error no esté en ninguno de esos. – jlindenbaum

+0

Tengo el mismo error. Parece que si su diseño de xml no está bien formado, es posible que obtenga este error. Funcionó después de corregir las etiquetas xml no válidas en el diseño. hth! –

Respuesta

13

Su línea xmlns debe leer xmlns:android="http://schemas.android.com/apk/res/android". Eso probablemente solucionará tu problema.

EDIT:

Citando Google en http://developer.android.com/guide/topics/manifest/manifest-element.html:

xmlns: android Define el espacio de nombres Android.

Este atributo debe establecer siempre en "http://schemas.android.com/apk/res/android".

Cuando está utilizando un archivo XML como los archivos de diseño que está utilizando, los atributos que puede usar dentro de ese mismo archivo están definidos por un esquema.

xmlns es la abreviatura de "espacio de nombres XML". Está definiendo dentro de su XML un espacio de nombre de palabras clave "android:", y es por eso que necesita declarar todos sus atributos con "android:" al principio, como android:layout_height o android:layout_width.

El espacio de nombre debe apuntar a un esquema válido, que debe apuntar a una URL que contenga ese esquema exacto. Si la URL no apunta a un esquema válido, sus atributos XML no serán reconocidos, que era el problema que estaba teniendo.

Espero que pueda entender mi explicación.

Si desea obtener más información sobre espacios de nombres y esquemas XML, le puedo indicar directamente W3Schools y Wikipedia: http://www.w3schools.com/xml/xml_namespaces.asp, http://en.wikipedia.org/wiki/XML_schema.

+3

Oh. gracias :) Funciona para mí. Pero puede explicarme por qué, por favor :) Creo que es solo una 'URL', por lo tanto no es importante :( – hqt

+1

¡Claro! Edité mi publicación y la expliqué. Dígame si necesita más aclaraciones, estaré encantado de ayuda con lo que puedo. – jcxavier

+3

Muchas gracias: D Soy nuevo en XML. He leído esos conceptos antes, pero no con cuidado. Con tu explicación y tu enlace, tengo más información :) – hqt

0

Podría intentar hacer proyectos> limpiar. Si eso no funciona, intente cambiar los argumentos de su diseño relativo con match_parent.

1

Debe cambiar la línea: xmlns:android="http://schemas.android.com a la línea: xmlns:android="http://schemas.android.com/apk/res/android

He conocido a este error y lo; s dolorosa.Pero no puedo explicar por qué.

espero que funcione para su :)

+3

Oh. gracias :) Funciona para mí. Pero puede explicarme por qué, por favor :) Creo que es solo una URL, por lo que no es importante :( – hqt

+1

La URL "http://schemas.android.com/apk/res/android" es la ubicación de un archivo de esquema Un archivo de esquema define los tipos y valores de datos permitidos para un espacio de nombres determinado. A – ComeIn

2

Podría ser irrelevante, pero la etiqueta espacio de nombres llamado la atención, como es the usual one:

xmlns:android="http://schemas.android.com/apk/res/android" 
+3

Gracias. :) Funciona para mí. Pero puede explicarme por qué, por favor :) Creo que es solo una URL, por lo que no es importante :( – hqt

+0

La URL es la ubicación de un archivo de esquema xml. Un archivo de esquema proporciona una definición de datos para un conjunto de datos dado que corresponde a un "espacio de nombre". Define cuál puede ser la estructura permitida de un archivo XML (por ejemplo, .axml debe comenzar con un elemento de diseño de algún tipo ...) y los tipos de datos que están permitidos para cada elemento (por ejemplo, id. ser referencia refinada al identificador de recursos). Al agregar la referencia "xmlns: android =" http://schemas.android.com/apk/res/android "a su .axml, indica que el xml que sigue debe ajustarse a la shema ubicado en esa url. – ComeIn

Cuestiones relacionadas