jueves, 17 de octubre de 2013

Nuestra primera App

Buenas amigos, en el tema anterior vimos como crear nuestro primer proyecto android. En este nuevo tema veremos la función que tiene cada carpeta dentro del proyecto, crearemos nuestra primera aplicación y la ejecutaremos en nuestro emulador.



Bien, una vez se nos ha creado el proyecto nos aparecen un gran número de carpetas, expliquémoslas un poquito:

  • src: En esta carpeta van ubicadas nuestras clases java con el código fuente de nuestra aplicación.
  • gen: En esta carpeta se nos crean clases para la construcción de nuestra aplicación. Es MUY IMPORTANTE que no modifiquéis NADA de su contenido. 
  • libs: Anteriormente en java podíamos agregar otras librerías a nuestros proyectos por medio de agregar jar externos, con android deberemos importar esos .jar a esta carpeta, si no, no la pilla.
  • res: Esta carpeta es la que más vais a trastear. En ella se asientan las activitys, los archivos, el estilo de nuestra aplicación, etc. Esta dividida en varias subcarpetas:
    • drawable: Veréis que tenemos varias carpetas drawable-hdpi, drawable-ldpi...En estas carpetas almacenamos, sobre todo, las imágenes que vamos a ir utilizando para nuestra aplicación. Las extensiones hdpi, ldpi, ect, nos indican la resolución que tendrán esas imágenes en nuestra aplicación en función a la calidad de pantalla del usuario: baja, media y alta calidad. Si nosotros tomamos una imagen para utilizar y queremos que este para todas las resoluciones, solo tenemos que meter una copia de la imagen en cada carpeta, y ya android se ocupará él solito de elegir la imagen adecuada para cada tipo de resolución. Fantástico.
    • layout: Esta carpeta es la encargada de almacenar nuestras activitys. Las activitys para android son las JFrames de java. Anteriormente, y cuando solo desarrollábamos en java, todo consistía en crear clases y clases y al final creábamos una aplicación, mas sencilla o más compleja, pero sólo trabajaba con clases. Android, al contrario, trabaja con clases y Activitys. Las Activitys son las encargadas de la parte gráfica de nuestra aplicación y en ellas podremos ir colocando botones, menús, listas, etc, mientras que las clases serán las encargadas de darles funciones a esas activitys y a sus componentes. ¿Que quiero decir con esto? Que cada activity debe llevar una clase asociada o ligada que veremos más adelante.
    • menu: En esta carpeta se nos creará un archivo .xml por cada activity que tengamos. Estos archivos son los encargados de configurar un menú o barra de tareas para cada activity. Los veremos en temas mas avanzados.
    • values: Esta carpeta es la encargada de almacenar los archivos .xml que tengan que ver con la apariencia de nuestra aplicación, tanto sea por el estilo de las letras, el color, las dimensiones, la fuente, y un largo etc. Como pasaba con drawable, esta carpeta tiene otros subtipos para acomodarse a las distintas configuraciones de los dispositivos.
    • AndroidManifest.xml: Bien, esto es un archivo no una carpeta, pero es el archivo más importante que tiene nuestra aplicación, es el encargado de obtener toda la información y ejecutarla en un orden preciso para su funcionamiento, en el podemos configurar cualquier cosa de nuestra aplicación, y cualquier cosa, es cualquier cosa útil para tu aplicación, nombre, versión, permisos de acceso, y otro largo etc. Con esta primera aplicación que hagamos no vamos a ver nada del manifest, pero en los siguientes temas si iremos viéndolo y comprendiendo su comportamiento poco a poco, ya que es mucha la información que hay.
Bueno, ya hemos visto un poco por encima el funcionamiento de nuestro proyecto, vamos a crear nuestra primera aplicación. Para esta primera aplicación vamos a hacer una cosa muy sencilla como es la suma de dos números y mostrar el resultado al pulsar un botón.

Bien, como dijimos, las activitys y las clases deben de ir ligadas, una se encarga de la parte gráfica y la otra del código para su funcionamiento. Comenzaremos con la parte gráfica. Lo primero de todo es que tengáis claro que a lo que en java se llamaba JLabel y JTextField, en android se denomina TextView y EditText respectivamente.


Bien, así quedaría mi activity, compuesto por 3 TextView, 3 EditText y 1 botón. Tenéis varias formas de colocar vuestros items en la activity:

  • Pinchando en la paleta de la izquierda en el item seleccionado y colocándolo en el interior de la activity, posteriormente pinchamos con el botón derecho del ratón encima de cualquier item, el primer TextView que pusimos por ejemplo, y observaremos que se nos despliega un menú en la que podremos ir personalizando nuestro TextView, cambiar el id, el texto, el color del texto, el tamaño, el tamaño que ocupará en pantalla, etc. 

Vamos a pinchar sobre "Edit Text..." y editaremos el texto que se vaya a mostrar. Se nos abrirá una ventana donde podremos ver las variables de tipo String que hay almacenadas en nuestro archivo (string.xml), este archivo será visto más adelante, no os preocupéis.


Pinchamos sobre "New String..." para crear una nueva variable de tipo String que será utilizada por la activity.


Bien, en esta ventana, solo nos preocupamos de las 2 primeros items:

  • String: Le damos valor a la variable
  • New R.string: Le asignamos un nombre a la variable.
Posteriormente pulsamos a todo "OK" y ya tendremos un nuevo valor de texto para nuestro TextView. Posteriormente podéis darle tamaño al texto con la opción TextSize, solo tendréis que darle un valor de tipo entero y agregar las letras sp, por ejemplo, como yo lo tengo, 22sp, ¿Por qué agregamos sp?Porque si no lo agregamos no lo pilla.

Bien, esta es una forma de personalizar cada elemento, no es la más correcta, pero igual funciona.
  • Otra forma de cambiar las propiedades de nuestros items se nos muestra en la parte derecha de nuestra pantalla, y es muy parecido a las propiedades que teníamos con java cuando estábamos en la parte de diseño




  • Otra forma que tenemos de modificar las propiedades de nuestros items, sería, para mí la más correcta y si has estudiado un poco de HTML y CSS verás que es muy parecido. Se trata de ir a la carpeta values, a nuestros archivos style.xml, dimensions.xml, a parte de otros, y allí crear estilos para nuestros items para, posteriormente, referenciarlos por la parte de código xml de nuestra activity. Parece complicado así tal cual lo has leído, pero es muy sencillo de hacer y en temas posteriores de hartaras de hacerlo, no temas.
Bien, no vamos a entretenernos más con la activity, vamos a empezar darle funciones. Para ello nos iremos a la carpeta src y dentro de nuestro paquete debemos de tener nuestra clase .java, esta clase siempre se crea automáticamente cada vez que se crea una activity, recordad que las activitys tienen una clase ligada, así que el compilador nos crea una automáticamente que ya esta ligada a la activity creada.


Bueno, esta clase varía un poco con respecto a una clase normal de java. tenemos 2 métodos que Heredamos de Activity, estos métodos serán los encargados de construir nuestra activity y el menú de nuestra activity.

El constructor del menú es opcional, lógico si pensamos que no hace falta que haya un menú en una activity obligatoriamente; pero el constructor de la activity SI es obligatorio, e incluso eclipse os matará a errores y avisos si heredáis de Activity y no lo ponéis, es MUY IMPORTANTE.

Para referenciar la activity a la que le vamos a dar funciones tenemos la línea de código
    • setContentView(R.layout.activity_main);
Esa linea indica a que activity estamos apuntando y es también, una linea obligatoria de poner. Una clase, SI hereda de Activity debe referenciar una Activity.

Teniendo nuestra clase con nuestra activity referenciada, nos toca referenciar los items de la activity para trabajar con ellos en la clase. Para ello crearemos 3 instancias de EditText, ya que deberemos obtener el texto, hacer una operación de suma y poner el resultado en su lugar correspondiente.


Bien, primero instanciamos los EditText
  • EditText valor1;
Posteriormente, y dentro del constructor de la activity referenciamos cada EditText con el deseado de la activity.
  • valor1=(EditText) findViewById(R.id.editText1);
Esta linea es muy importante, ya que nos permite enlazar cualquier item de la activity con la clase, de esta manera ya podemos manejarlo. El método findViewById(), nos devuelve un "View" por lo que tendremos que hacer casting para especificar el que queremos usar, en este caso EditText.

Bien, podéis observar que he creado un método para realizar la suma de los valores pasados a los EditText. Le hemos pasado por argumento un objeto de tipo View, agregar el View por argumentos es muy importante para darle funcionalidad a nuestro botón. 

Una vez hecho esto nos volvemos a nuestra activity y pinchamos sobre nuestro botón con el botón derecho de nuestro ratón y nos vamos a "other properties"----->"inherited from view"------>"onClick"


Y os aparecerá una ventanita donde sólo tendréis que poner el nombre de vuestro método View.



Y ya con esto, podéis volver a vuestra clase y ejecutarla como android application para poder ejecutarla en vuestro emulador. Una vez cargada os debería quedar más o menos de la siguiente manera:



Bien, ya con esto damos por finalizado este tema, ya se que pueden llegar a ser muchos conceptos, pero solo tenéis que tener claro que las activitys y las clases van ligadas. No os he mostrado nada de xml, no quiero confundiros mucho más, en los siguientes temas iremos viendo diferentes items, y que hacer con ellos, e iremos introduciéndonos en el entorno xml poco a poco.

Un saludo.

4 comentarios:

  1. Es interesante que vayamos encontrando temas como los de candy camera gratuita porque así podremos tener muchas funciones para ir ordenando nuestras fotos.

    ResponderEliminar
  2. Muy buena app estaría bien subirla a un market como goapk así todos la podriamos bajar

    ResponderEliminar
  3. Al igual que el desarrollo de aplicaciones web, el desarrollo de aplicaciones móviles tiene sus raíces en el desarrollo de software más tradicional. Sin embargo, una diferencia fundamental es que las aplicaciones móviles a menudo se escriben específicamente para aprovechar las características únicas de un dispositivo móvil en particular

    ResponderEliminar