2011-06-08 30 views
7

Normalmente tengo que escribir código de diseño como esto:¿Por qué no puedo definir los atributos de Android en el espacio de nombres predeterminado?

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

quiero hacer algo como esto:

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

Pero este código no se ejecuta correctamente. ¿Por qué?

Y la segunda pregunta: ¿Por qué los elementos namen están en CamelCase y los atributos están en under_score?

Respuesta

6

espacios de nombres predeterminados XML do not apply to attribute names. Por lo tanto, siempre hay que especificar el espacio de nombre de un atributo, si tiene uno: declaraciones de espacios de

defecto no se aplican directamente a los nombres de atributos; la interpretación de los atributos no prefijados está determinada por el elemento en el que aparecen.

Así que la verdadera pregunta es: ¿Por qué los diseñadores Android definen los nombres de los elementos sin espacio de nombres, poniendo sólo los atributos en el espacio de nombres Android?

Como sugiere el documento, si los nombres de los elementos estaban en el espacio de nombres de Android, a continuación, los nombres de atributos realmente no necesitaría su propio espacio de nombres.

+3

Ahora veo. Es realmente extraño porque en XAML y MXML todos los controles están en espacios de nombres apropiados y tampoco hay estúpidos prefijos de subrayado. Microsoft y Adobe demostraron que es posible crear un elegante lenguaje de marcado de GUI basado en XML y Google simplemente no logró hacer eso. – Poma

1

Pero este código no se ejecuta correctamente. ¿Por qué?

Porque las herramientas de compilación no son compatibles. La última vez que revisé, cualquier espacio de nombres prefijado debería funcionar (por ejemplo, xmlns:a="http://schemas.android.com/apk/res/android"), pero el espacio de nombres predeterminado nunca funcionó.

Si lo desea, puede proponer y contribuir con un parche. En el camino, usted podrá determinar si existe o no una razón filosófica para esto, una razón técnica, o si simplemente nunca lo lograron.

¿Por qué element namen están en CamelCase y los atributos están en under_score?

Los nombres de elementos son clases de Java, que normalmente están en CamelCase. Los atributos no están "en under_score" en general: el prefijo layout_ indica una familia de atributos que son solicitudes de un View a su contenedor. Pero, si mira los atributos con más cuidado, verá que la mayoría son camelCase, ignorando este prefijo (por ejemplo, android:textSize).

Cuestiones relacionadas