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

时间:2011-06-08 16:47:25

标签: android xml namespaces

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

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

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

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

2 个答案:

答案 0 :(得分:7)

XML默认命名空间do not apply to attribute names。因此,您始终必须指定属性的名称空间(如果有):

  

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

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

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

答案 1 :(得分:2)

  

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

因为构建工具不支持它。最后我检查过,任何带前缀的命名空间都应该有效(例如xmlns:a="http://schemas.android.com/apk/res/android"),但默认命名空间从未起作用。

如果您愿意,您可以提出并提供补丁。在此过程中,您将能够确定是否存在这样的哲学原因,技术原因,或者他们是否从未接触过它。

  

为什么元素名称在CamelCase中,属性在under_score?

元素名称是Java类,通常在CamelCase中。一般来说,属性不是“under_score” - layout_前缀表示一系列属性,这些属性是View到其容器的请求。但是,如果你仔细查看属性,你会发现大多数是camelCase,忽略了这个前缀(例如,android:textSize)。