Ошибка Android: вы должны указать атрибут layout_width

Извините, потому что мой заголовок похож на многие другие на StackOverFlow, но ни одно из этих решений не соответствует моей проблеме.

Я разрабатываю макет, используя Relative Layout. После проектирования в представлении кода, когда я переключаюсь на графическое представление, Eclipse замечает:

Вы должны предоставить атрибут layout_width.

Вы должны предоставить атрибут layout_height.

. Когда я запускаю эту программу, я замечаю ошибку в LogCat

Вызвано: java.lang.RuntimeException: строка двоичного файла XML № 2: вы должны указать атрибут layout_width.

Вот мой 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>

person hqt    schedule 02.03.2012    source источник
comment
Этот XML выглядит правильно — это единственный макет XML, который у вас есть? Проверьте остальные, чтобы убедиться, что ошибка не в одном из них.   -  person jlindenbaum    schedule 02.03.2012
comment
Я получил эту же ошибку. Похоже, что если ваш макет xml сформирован неправильно, вы можете получить эту ошибку. Это сработало после того, как я исправил недопустимые теги xml в макете. хх!   -  person Lahiru Ruhunage    schedule 05.08.2013


Ответы (4)


Ваша строка xmlns должна читаться как xmlns:android="http://schemas.android.com/apk/res/android". Это, вероятно, решит вашу проблему.

ИЗМЕНИТЬ:

Цитирование Google в http://developer.android.com/guide/topics/manifest/manifest-element.html:

xmlns:android Определяет пространство имен Android.

Для этого атрибута всегда должно быть установлено значение "http://schemas.android.com/apk/res/android. ".

Когда вы используете файл XML, такой как файлы макета, которые вы используете, атрибуты, которые вы можете использовать в этом же файле, определяются схемой.

xmlns — это сокращение от «пространство имен XML». Вы определяете внутри своего XML пространство имен ключевых слов «android:», и поэтому вам нужно объявить все свои атрибуты с «android:» в начале, например android:layout_height или android:layout_width.

Пространство имен должно указывать на допустимую схему, которая должна указывать на URL-адрес, содержащий эту точную схему. Если URL-адрес не указывает на допустимую схему, ваши XML-атрибуты не будут распознаны, что и было проблемой, с которой вы столкнулись.

Надеюсь, вы поняли мое объяснение.

Если вы хотите узнать больше о пространствах имен и схемах XML, я могу указать вам прямо на W3Schools и Википедию: http://www.w3schools.com/xml/xml_namespaces.asp, http://en.wikipedia.org/wiki/XML_schema.

person jcxavier    schedule 02.03.2012
comment
Ой. спасибо :) Это работает для меня. Но не могли бы вы объяснить мне, почему, пожалуйста :) Я думаю, что это просто URL, так что не важно :( - person hqt; 02.03.2012
comment
Конечно! Я отредактировал свой пост и объяснил это. Скажите, если вам нужны дополнительные разъяснения, я буду рад помочь, чем смогу. - person jcxavier; 02.03.2012
comment
Ой. Большое спасибо: D Я новичок в XML. Я читал эту концепцию раньше, но не внимательно. С вашим объяснением и вашей ссылкой я понял больше :) - person hqt; 02.03.2012
comment
android — это псевдоним схемы, на которую вы ссылаетесь. Если вы изменили xmlns:android=schemas.android.com/apk/res/android на xmlns:droid=schemas.android.com/apk/res/android, то вы может префиксировать все ваши атрибуты (например) droid:layout_width. Пока псевдоним уникален для вашего .axml, все в порядке. Чтобы сэкономить время, вы можете использовать псевдоним только с a, который затем позволяет вам определять атрибуты как: layout_width ... экономит много ввода и кто не устает печатать android: - person ComeIn; 19.04.2016

Это может быть неуместно, но тег namespace привлек мое внимание, как обычный это:

xmlns:android="http://schemas.android.com/apk/res/android"
person Orkun Ozen    schedule 02.03.2012

Вы должны изменить строку: xmlns:android="http://schemas.android.com на строку: xmlns:android="http://schemas.android.com/apk/res/android

Я встретил эту ошибку, и это болезненно. Но я не могу объяснить, почему.

Надеюсь, это работает для вашего :)

person Community    schedule 02.03.2012
comment
Ой. спасибо :) Это работает для меня. Но не могли бы вы объяснить мне, почему, пожалуйста :) Я думаю, что это просто URL, так что не важно :( - person hqt; 02.03.2012
comment
URL-адрес schemas.android.com/apk/res/android — это местоположение файл схемы. Файл схемы определяет допустимые типы данных и значения для данного пространства имен. а - person ComeIn; 19.04.2016

Не могли бы вы попробовать делать проекты > clean. Если это не сработает, попробуйте изменить аргументы вашего относительного макета с помощью match_parent.

person wesdfgfgd    schedule 02.03.2012