Почему я не могу определить атрибуты Android в пространстве имен по умолчанию? - PullRequest
7 голосов
/ 08 июня 2011

Как правило, я должен написать код макета следующим образом:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="fill_parent" 
              android:layout_height="fill_parent" 
              android:orientation="vertical" />

Я хочу сделать что-то вроде этого:

<LinearLayout xmlns="http://schemas.android.com/apk/res/android"
              layout_width="fill_parent" 
              layout_height="fill_parent" 
              orientation="vertical" >

Но этот код не работает должным образом.Почему?

И второй вопрос: почему элемент namen находится в CamelCase, а атрибуты в under_score?

Ответы [ 2 ]

7 голосов
/ 08 июня 2011

Пространства имен XML по умолчанию не применяются к именам атрибутов . Следовательно, вы всегда должны указывать пространство имен атрибута, если оно есть:

Декларации пространства имен по умолчанию не применять непосредственно к именам атрибутов; интерпретация без префикса атрибуты определяется элемент, на котором они появляются.

Таким образом, настоящий вопрос заключается в следующем: Почему разработчики Android определяли имена элементов без пространства имен, помещая только атрибуты в пространство имен Android?

Как следует из документа, если бы имена элементов находились в пространстве имен Android, тогда имена атрибутов действительно не требовали бы их собственное пространство имен.

2 голосов
/ 08 июня 2011

Но этот код работает неправильно. Почему?

Потому что инструменты сборки не поддерживают его. Последнее, что я проверял, должно работать любое префиксное пространство имен (например, xmlns:a="http://schemas.android.com/apk/res/android"), но пространство имен по умолчанию никогда не работало.

Если вы хотите, вы можете предложить и внести патч. Попутно вы сможете определить, есть ли философская причина для этого, техническая причина, или они просто никогда не удосужились.

Почему элемент namen находится в CamelCase, а атрибуты в under_score?

Имена элементов - это классы Java, которые обычно находятся в CamelCase. Атрибуты вообще не находятся в "under_score" - префикс layout_ указывает семейство атрибутов, которые являются запросами от View к его контейнеру. Но если вы посмотрите на атрибуты более внимательно, вы увидите, что большинство из них - camelCase, игнорируя этот префикс (например, android:textSize).

...