2009-12-02 4 views
75

Actualmente estoy programando una aplicación para Android. Ahora lo que descubrí es que no puede colocar objetos de recursos, por ejemplo, una imagen en la carpeta dibujable y ponerle el nombre "myTestImage.jpg". Esto le dará un error de compilación ya que la sintaxis de Camel Case no está permitida, por lo que tendrá que cambiarle el nombre como "my_test_image.jpg".Convención de nomenclatura para Android: minúscula con subrayado vs. caja de camello

Pero, ¿qué pasa con los identificadores que define en el archivo XML. Digamos que tiene la siguiente definición

<TextView android:id="@+id/myTextViewFirstname" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="Firstname" /> 

Ésta es una definición válida, compila y funciona muy bien en mi emulador de Android, aunque - como se ve - que estoy especificando el ID del caso en la sintaxis de camello.

Ahora, las muestras de Android siempre usan minúsculas y guiones bajos. ¿Es esto solo una convención de nombres para usar minúsculas con guiones bajos para las identificaciones o puede causar problemas en el dispositivo real?

Thx

Respuesta

74

El dispositivo no se quejará si usa los nombres de id de camel-case. Para mi primera aplicación escribí todas las identificaciones en camel-case porque creo que se ve mejor en el código Java de esa manera, y funciona muy bien.

estoy cambiando poco a poco mi mente en el camello de los casos, sin embargo, porque terminas con dos convenciones de nombres diferentes - por ejemplo:

// This must be undescored due to naming constrictions 
setContentView(R.layout.my_long_layout_name); 

// Now this looks a little out of place 
findViewById(R.id.myLongSpecificId); 

yo también se preguntan acerca de las normas aquí. Google es inconsistente en sus ejemplos; a veces usan minúsculas, a veces insertan guiones bajos, y algunas veces usan camel-case.

+15

Sí, ese es exactamente mi problema. Te obligan a usar la convención de nomenclatura subrayado para los diseños, mientras que puedes utilizar camel-case o subrayado para los ids que hacen referencia a los controles/widgets dentro de las definiciones de diseño XML. Google realmente debería definir algún estándar aquí (si no lo hicieron ya, al menos no encontré nada). Así que ir de una manera es la mejor manera de ser coherente en toda la aplicación, ya sea que haga referencia a diseños o campos con referencia de id. – Juri

+0

Solo por curiosidad: ¿Tienes un enlace donde Google es inconsistente, es decir, donde usaron la notación camel case para los identificadores? – Juri

+6

Para confundir aún más las cosas, los nombres de estilo (que son como ID para estilos) en las plantillas de proyecto usan PascalCase, p. 'AppBaseTheme' y' AppTheme'. –

0

Si el compilador del androide está haciendo realmente lo que usted dice restringir caso de camellos (que parece bastante extraño), entonces usted debe pegarse a las convenciones establecidas.

Ir contra la corriente solo causará confusión innecesaria. Mantenga las cosas consistentes en todos los lugares donde sea posible.

+0

Probablemente malinterpretaste lo que estaba tratando de decir. El compilador se quejará si pone recursos como un archivo y escribe eso en camel case. Sin embargo, el otro caso es cuando especifica ID en los archivos de diseño XML. Allí tienes la posibilidad de colocar los nombres de id de camel case y el emulador funciona bien. Ahora como he mencionado, las muestras de Google están todas en la forma my_id_name, pero hay muchas otras muestras alrededor de tener nombres de id. Camel case ... – Juri

1

Los nombres de archivo xml (que es lo que se utiliza en la carpeta dibujable) deben estar en minúsculas separados por el carácter de subrayado _, ya que los nombres de archivo en mayúscula no son compatibles con xml.

+1

No se trata de nombres de archivo, y además, algunas personas prefieren no escribir en mayúscula la primera letra cuando se trata de un camello. – Jesper

+0

Es un extraño problema inconciliable OMI. No puede distinguir entre mayúsculas y minúsculas para distinguir, no, pero ¿por qué no solo prohibir que los archivos de recursos tengan el mismo componente raíz en el mismo directorio? – RichieHH

+0

(Por cierto, se trata de nombres de archivo vs ID de recursos: vuelva a verificar el OP) – RichieHH

8

Creo que está hablando de identificadores dentro de un archivo xml.

por ejemplo:

android:id="@+id/home_button" 

frente

android:id="@+id/HomeButton" 

no he encontrado ninguna convención o directriz en esta materia, por lo que los desarrolladores en mi proyecto están utilizando ambos métodos de manera indistinta, que es bastante doloroso :(

+2

De hecho, no hay una directriz "oficial" aquí, pero definitivamente establecería una para cada proyecto que estoy llevando a cabo ... básicamente es lo mismo que con nombrando convenciones en general – Juri

+0

Él está hablando de ID en relación con las restricciones de nombres en los archivos de recursos. – RichieHH

+0

Hay una incoveniencia enorme: CTRL + W en Android Studio –

4

creo que es bueno si usamos todas las letras minúsculas con guiones bajos.

Basta con mirar a esta (Agregando a lo que Daniel había respondido)

// Camel Case 
    TextView tvUserName = (TextView) findViewById(R.id.tvUserName); 
// Small Caps and Underscores 
    TextView tvUserName = (TextView) findViewById(R.id.tv_user_name); 

en mi propia experiencia, tiendo a ser un poco confuso de la convención caso de camellos en XML porque cuando lo vincula a Java, que también usa camel case (porque es el estándar), parece un doppleganger.

+0

Esto es muy subjetivo y no responde la pregunta de por qué no se pueden nombrar de manera similar los archivos de recursos como se pueden identificar las cadenas. – RichieHH

12

Si observa los campos android.R.id.*, observará que todos están en camel-case. Así que si los ID de Android están escritos en camel-case, supongo que tenemos que seguir esta convención :)

+0

Están en estuche de camello porque fueron creados en camelCase. Esto no establece ningún precedente de estilo de codificación para la comunidad en general y esto no está vinculado a las convenciones de nomenclatura de los archivos de recursos frente a los de las cadenas de identificación, que es lo que el cartel original está preguntando. – RichieHH

+3

Sí, fueron creados en estuche de camello. Pero estos ID son de la API de Android en sí, así que si el creador de la API ha usado camel case, supongo que es un buen método para seguir su convención. –

+6

there 'widget_frame' campo [http://developer.android.com/reference/android/R.id.html#widget_frame] también en' android.R.id. * 'Campos. en este campo, el uso de Google no hace hincapié en camel-case. Por lo tanto, su conclusión acerca de la convención de camel case es elegir una convención de ID que puede ser falsa. –

0

Creo que si usamos la convención de subrayado para id en archivos xml y la convención de camell case para campos de clase, entonces dará mejor visibilidad para cada desarrollador para distinguir entre identificadores XML y campos de clase.

Cuestiones relacionadas