2011-06-08 51 views
7

通常我必須寫佈局這樣的代碼:爲什麼我無法在默認命名空間中定義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中?

回答

6

XML默認名稱空間do not apply to attribute names。因此,您必須指定屬性的名稱空間(如果有):

默認名稱空間聲明不會 直接應用於屬性名稱; 屬性的前綴解釋是由它們出現的元素 決定的。

所以真正的問題是:沒有Android的設計師,爲什麼定義的元素名稱沒有命名空間,只把屬性到Android的命名空間?

正如文件指出,如果該元素的名字是在Android命名空間,那麼屬性的名稱真的不會需要自己的命名空間。

+3

現在我明白了。這真的很奇怪,因爲在XAML和MXML中,所有控件都在適當的名稱空間中,並且沒有愚蠢的下劃線前綴。因此,微軟和Adobe已經證明,可以製作一個優雅的基於XML的GUI標記語言,Google並沒有設法做到這一點。 – Poma 2011-06-09 14:49:19

1

但此代碼無法正常運行。爲什麼?

因爲構建工具不支持它。最後我檢查過,任何前綴名稱空間都可以工作(例如,xmlns:a="http://schemas.android.com/apk/res/android"),但默認名稱空間從未工作。

如果你願意,你可以建議並貢獻一個補丁。一路上,你將能夠確定是否存在這樣的哲學原因,技術原因,或者如果他們從未接近過。

爲什麼元素namen在CamelCase中,屬性是在under_score?

元素名稱是Java類,通常在CamelCase中。屬性通常不是「under_score」 - layout_前綴表示一系列屬性,這些屬性是從View到其容器的請求。但是,如果仔細查看屬性,則會看到大多數屬性是camelCase,而忽略此前綴(例如,android:textSize)。

相關問題