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

通常我必须写这样的布局代码:

<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?

Solutions Collecting From Web of "为什么我不能在默认命名空间中定义android属性?"

XML默认名称空间不适用于属性名称 。 因此,你总是必须指定一个属性的名称空间,如果它有一个:

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

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

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

但是这个代码不能正常运行。 为什么?

因为构build工具不支持它。 最后我检查,任何前缀命名空间应该工作(例如, xmlns:a="http://schemas.android.com/apk/res/android" ),但默认名称空间从来没有工作。

如果你愿意,你可以build议并贡献一个补丁。 一路上,您将能够确定是否存在这样的哲学原因,技术原因,或者如果他们从来没有解决这个问题。

为什么元素namen在CamelCase中,属性是在under_score?

元素名称是Java类,通常在CamelCase中。 通常,属性不是“under_score” – layout_前缀表示一系列属性,这些属性是从View到其容器的请求。 但是,如果更仔细地查看属性,则会看到大多数是camelCase,忽略此前缀(例如, android:textSize )。