为什么我无法在默认命名空间中定义android属性?

Pom*_*oma 7 xml android namespaces

通常我必须编写如下布局代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="fill_parent" 
              android:layout_height="fill_parent" 
              android:orientation="vertical" />
Run Code Online (Sandbox Code Playgroud)

我想做这样的事情:

<LinearLayout xmlns="http://schemas.android.com/apk/res/android"
              layout_width="fill_parent" 
              layout_height="fill_parent" 
              orientation="vertical" >
Run Code Online (Sandbox Code Playgroud)

但是这段代码运行不正常.为什么?

第二个问题:为什么元素namen在CamelCase中,属性在under_score中?

Dan*_*lau 7

XML默认名称空间不适用于属性名称.因此,您始终必须指定属性的名称空间(如果有):

默认名称空间声明不直接应用于属性名称; 对无前缀属性的解释由它们出现的元素决定.

所以真正的问题是:为什么Android设计者在没有命名空间的情况下定义元素名称,只将属性放入Android命名空间?

正如文档所暗示的,如果元素名称在Android命名空间中,那么属性名称实际上不需要它们自己的命名空间.

  • 现在我明白了.这真的很奇怪,因为在XAML和MXML中,所有控件都在适当的命名空间中,并且没有愚蠢的下划线前缀.因此,微软和Adobe已经证明可以制作一种优雅的基于XML的GUI标记语言,谷歌并没有设法做到这一点. (4认同)