2012-03-02 10 views
6

Przepraszam, ponieważ mój tytuł jest podobny do wielu innych na StackOverFlow, ale żadne z tych rozwiązań nie jest zgodne z moim problemem.Błąd Androida: Musisz podać atrybut layout_width

Projektuję wykorzystanie layoutu Relative Layout. Po zaprojektowaniu w widoku kodu, po przejściu na widok graficzny, powiadomienia Eclipse:

Musisz podać atrybut layout_width.

Musisz podać atrybut layout_height.

. Kiedy uruchomić ten program, zauważy błąd w LogCat

spowodowane: java.lang.RuntimeException: Linia Binary pliku XML # 2: musi dostarczyć atrybut layout_width.

Oto mój plik 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

To XML wygląda poprawnie - jest to jedyny układ XML, że masz ? Sprawdź pozostałe, aby upewnić się, że błąd nie występuje. – jlindenbaum

+0

Mam ten sam błąd. Wygląda na to, że jeśli twój układ xml nie jest dobrze uformowany, możesz dostać ten błąd. To działało po poprawieniu nieprawidłowych tagów xml w układzie. hth! –

Odpowiedz

13

Twoja linia xmlns powinien przeczytać xmlns:android="http://schemas.android.com/apk/res/android". To prawdopodobnie naprawi twój problem.

EDIT:

Cytowanie Google w http://developer.android.com/guide/topics/manifest/manifest-element.html:

xmlns: android Definiuje nazw Android.

Ten atrybut powinien zawsze być ustawiony na " " na "http://schemas.android.com/apk/res/android".

Podczas korzystania z plików XML, takich jak pliki układu, których używasz, atrybuty, których można używać w tym samym pliku, są zdefiniowane przez schemat.

xmlns jest skrótem od "XML namespace". Definiujesz w swoim XML przestrzeń nazw słów kluczowych "android:", dlatego na początku musisz zadeklarować wszystkie atrybuty z "android:", na przykład android:layout_height lub android:layout_width.

Przestrzeń nazw powinna wskazywać prawidłowy schemat, który powinien wskazywać URL zawierający ten dokładny schemat. Jeśli adres URL nie wskazuje poprawnego schematu, atrybuty XML nie zostaną rozpoznane, co stanowiło problem.

Mam nadzieję, że zrozumiesz moje wyjaśnienie.

Jeśli chcesz przeczytać więcej na temat przestrzeni nazw XML i schematów, mogę wskazać ci bezpośrednio W3Schools i Wikipedia: http://www.w3schools.com/xml/xml_namespaces.asp, http://en.wikipedia.org/wiki/XML_schema.

+3

Oh. dzięki :) To działa dla mnie. Ale czy możesz mi wytłumaczyć dlaczego, proszę :) Myślę, że to po prostu "URL", więc nie ważne :( – hqt

+1

Jasne! Edytowałem mój post i wyjaśniłem. Powiedz, czy potrzebujesz dalszych wyjaśnień, będę szczęśliwy pomóżcie z tym, co potrafię – jcxavier

+3

O, dziękuję tak bardzo: D Jestem nowym kamerzystą XML, przeczytałem te koncepcje wcześniej, ale nie starannie.Z wyjaśnieniami i linkiem, rozumiem więcej :) – hqt

0

Czy możesz spróbować zrobić projekty> czyste. Jeśli to nie działa, spróbuj zmienić argumenty względnego układu za pomocą match_parent.

1

należy zmienić linię: xmlns:android="http://schemas.android.com do linii: xmlns:android="http://schemas.android.com/apk/res/android

Poznałem ten błąd i to; s bolesne.Ale nie potrafię wytłumaczyć dlaczego.

Nadzieję, że pracuje dla Twojego :)

+3

Oh. dzięki :) To działa dla mnie. Ale czy możesz mi wytłumaczyć dlaczego, proszę :) Myślę, że to tylko URL, więc nie ważne :( – hqt

+1

Adres URL "http://schemas.android.com/apk/res/android" jest lokalizacją pliku schematu Plik schematu definiuje dopuszczalne typy danych i wartości dla danego obszaru nazw.A – ComeIn

2

To może być nieistotny ale tag nazw przyciągnęło moją uwagę, jak the usual one jest:

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

O, dziękuję :) To działa dla mnie. Ale czy możesz mi wytłumaczyć dlaczego, proszę :) Myślę, że to tylko URL, więc nie ważne :( – hqt

+0

Adres URL jest lokalizacją pliku schematu XML. Plik schematu zapewnia definicję danych dla danego zbioru danych, który mieści się w "namespacce." Określa, jaka może być dopuszczalna struktura pliku XML (np. .axml musi zaczynać się od jakiegoś elementu layoutu ...), a typy danych, które są dozwolone dla każdego elementu (np. id) być uszeregowanym ref do identyfikatora zasobu.) Dodając odniesienie "xmlns: android =" http://schemas.android.com/apk/res/android "do pliku .axml, stwierdzasz, że następujący xml musi być zgodny z shema znajduje się pod tym adresem URL. – ComeIn