Convención de nomenclatura de id de Android: minúsculas con subrayado vs. caso camel


Actualmente estoy programando una aplicación para Android. Ahora lo que descubrí es que no se pueden colocar objetos de recursos, por ejemplo, una imagen en la carpeta de elementos de diseño y nombrarla como "myTestImage.jpg". Esto le dará un error de compilador ya que la sintaxis de camel case no está permitida, por lo que tendría que cambiarle el nombre como "my_test_image.jpg".

Pero qué pasa con los ID 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" />

Esta es una definición válida, compila y funciona simplemente bien en mi emulador de Android, aunque - como se ve-estoy especificando el id en la sintaxis de camel case.

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

Thx

Author: ThinkingStiff, 2009-12-02

9 answers

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

Estoy cambiando lentamente mi opinión sobre camel-case, 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 me pregunto acerca de los estándares aquí. Google es inconsistente en sus ejemplos; a veces usan todas las minúsculas, a veces inserta guiones bajos, y a veces usan camel-case.

 80
Author: Daniel Lew,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-12-02 15:30:11

Si observa los campos android.R.id.*, notará que todos ellos 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:)

 12
Author: Kiril Aleksandrov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-19 11:00:08

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

Ej:

android:id="@+id/home_button"

Versus

android:id="@+id/HomeButton"

No he encontrado ninguna convención o directriz en este asunto, por lo que los desarrolladores de mi proyecto están usando ambos métodos indistintamente, lo cual es bastante doloroso: (

 9
Author: Javier Martínez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-20 15:49:39

Creo que es bueno si usamos todas las letras pequeñas con guiones bajos.

Basta con mirar esto(Añadiendo 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 confundirme un poco con la convención de camel case en xml porque cuando lo vinculas a Java que también usa camel case(porque es el estándar) parece un doppleganger.

 4
Author: Rogene Sagmit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-05 06:32:34

Si nos fijamos en algunos de los ejemplos de aplicaciones de Google, tales como:

Https://github.com/google/iosched

Usan guiones bajos. Tan.... ¿tal vez así es como deberíamos hacerlo?

 4
Author: Micro,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-30 16:01:40

Los nombres de archivo Xml (que es lo que se usa en la carpeta del elemento de diseño) deben estar todos en minúsculas separados por el carácter de subrayado_, ya que los nombres de archivo en mayúsculas no son compatibles con xml.

 1
Author: Paul,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-10-28 21:46:07

Si el compilador de Android realmente está haciendo lo que dices restringiendo camel case (lo que parece bastante extraño), entonces debes atenerte a las convenciones establecidas.

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

 0
Author: Brock Woolf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-12-02 11:21:43

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

 0
Author: Yasir Ali,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-23 11:20:29
android:id="@+id/frag_account_button"
frag_account_button = ((ListView)view.findViewById(R.id.frag_account_button));

android:id="@+id/fragAccountButton"
fragAccountButton = ((ListView)view.findViewById(R.id.fragAccountButton));

En primer lugar, no hay un cierto estándar para definir cuál es más válido, pero tengo algunas razones para probarlo. Mi idea es razonable mantener el ID XML y la variable java en el mismo nombre con la convención camel-case.

1 -) es fácil llegar a la variable buscando el lado del proyecto tanto XML como java.

2 -) Definición de biblioteca ButterKnife

 @BindView(R.id.infoTextView)
    TextViewFont infoTextView;

Es más apropiado mantenerse de esta manera.

 0
Author: Samet öztoprak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-28 14:00:51