jueves, 10 de noviembre de 2011

Hola Mundo Android II (El codigo y la AVD)


En el tutorial anterior explicamos el árbol de archivos del proyecto y la función de cada uno de estos, lo que haremos ahora sera explicar el funcionamiento del codigo.

Comenzaremos con el archivo main.xml ( res/values/main.xml y seleccionamos la pestaña main.xml que se encuentra a la derecha de graphical layout) que se puede observar a continuación:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/hello"
    />
</LinearLayout>

El LinearLayout es una etiqueta que pone a sus hijos(o etiquetas contenidas dentro de la misma) uno detrás de otro, ya sea de manera vertical u horizontal, dependiendo del valor del atributo. El xmlns (xml namespace) se refiere al contexto en el que trabajaremos, por eso los atributos que usamos posteriormente en el código van precedidos por la palabra android.
Los atributos que podemos observar en este código son:

orientation: Indica la orientación del LinearLayout, en este caso vertical, pone a todas las etiquetas anidadas una debajo de la otra.

layout_width y layout_height: Ancho y alto que tomará la etiqueta dentro de la pantalla, en este caso fill_parent(renombrado a match_parent despues del API 8) indica que tomará todo el espacio tanto vertical como horizontalmente (alto y ancho).  El parámetro opuesto, wrap_content pide a la etiqueta tomar solo el espacio necesario(después veremos  todo esto mas a fondo).

La etiqueta TextView se usa para mostrar texto, el cual fijamos con el atributo text y en este ejemplo se hace una referencia al archivo strings.xml(res/values/strings.xml) mediante el uso de @ y a la variable hello. En este caso  también podemos poner directamente la cadena de texto. Observando el archivo strings.xml:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<resources>
    <string name="hello">Hello World</string>
    <string name="app_name">Hola Mundo</string>
</resources>

Podemos ver como se declaran dos strings, la primera es a la que hacemos referencia en el código anterior y la segunda es la que guarda el nombre de nuestra aplicación la cual nombramos cuando creamos el proyecto. La documentación oficial indica que debemos externalizar los recursos(en este caso strings) del código de la aplicación y esta es la manera en que se hace(de igual manera que con imágenes u otros recursos) y por lo tanto la etiqueta resources es necesaria.

Ahora analizaremos  la clase lanzadora del programa, esta es MainActivity.java (src/com.blogspot.cdgandroid.holamundoandroid/MainActivity.java):

package com.blogspot.cdgandroid.holamundoandroid;

import android.app.Activity;
import android.os.Bundle;

public class MainActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}
La clase MainActivity hereda de Activity donde una Activity(actividad) usualmente es vista como una ventana que ocupa la pantalla aunque se pueden usar para otras cosas. Esta actividad tiene un ciclo de vida que se representa por varios metodos(en otra entrada se veran con detalle), en este caso solo llamamos al método onCreate que es el que se encarga de inicializar la actividad (el Bundle sirve para pasar información entre actividades). Justo después de declarar el método llamamos a la super clase ya que sin esta linea de código el programa no correría. Posteriormente fijamos el View que queremos en pantalla, en este caso hacemos la referencia a nuestro archivo main.xml por medio de R.layout(.main); en este caso solo se mostrara el TextView que dice "Hello Word".
Solo hace falta revisar el AndroidManifest.xml cuyo código vemos continuación:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.blogspot.cdgandroid.holamundoandroid"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-sdk android:minSdkVersion="8" />
    <application android:icon="@drawable/ic_launcher" android:label="@string/app_name">
        <activity android:name="MainActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

<manifest>: Es el elemento raiz de nuestro archivo, debe contener la etiqueta <application>.

  •   package: Indica el paquete de la aplicación.
  •   versionCode: Versión interna de la aplicación. Este valor no se refiere a la versión que verán los usuarios.
  •   versionName: Versión de la aplicación, es la que ven los usuarios finales.
<uses-sdk>: a pesar de su nombre, con esta etiqueta indicamos el nivel de API que usaremos.
  • minSdkVersion: Designamos el mínimo nivel de API requerido. En este caso tenemos el nivel 8 que esta asociado a Android 2.2 que fue el target que elegimos a la hora de crear el proyecto, aunque no necesariamente deben ser el mismo.
<application>: Declaramos la aplicación.
  • icon: Es el icono que queremos asociar a la aplicación.
  • label: Nombre o etiqueta que tendra nuestra aplicación como un todo (Hola Mundo en este ejemplo).
<activity>: Declaramos una actividad que implementa parte de la interfaz de usuario de la aplicación. Podemos tener varias actividades dentro del manifest y toda actividad debe ser declarada ya que si no lo hacemos el sistema nunca las verá y por lo tanto jamas podrán ser ejecutadas.
  • name: nombre de la clase que implementa la actividad, subclase de Activity.
  • label: etiqueta que tendrá la actividad, en este caso es la misma que la aplicación. El nombre se muestra en pantalla cuando la actividad debe ser representada al usuario.
Nombre de la Activity.

Nombre de la Aplicación.
<intent-filter>: Especifica los tipos de intents a los que un  activity, service o broadcast receiver pueden responder.

<action>: Añade una acción al intent-filter.
  • name: El nombre de la acción. En este caso el valor MAIN sirve como punto de entrada principal
<category>: Añade una categoría al intent-filter y da información adicional sobre la acción a ejecutar.
  • name: Nombre de la categoría, en este ejemplo es LAUNCHER, valor que indica que la acción main debe ser listada en el lanzador de aplicaciones.

Creando un AVD.
Finalmente crearemos una Android Virtual Device(AVD) que es un emulador que nos permite simular dispositivos y ejecutar nuestros programas como si lo hiciéramos en un teléfono real. Para crear una nueva AVD vamos a Window->AVD Manager, damos click en new y nos aparecerá una ventana como la de la izquierda.
Los unicos campos que modificamos son name y el target, todo lo demás lo dejamos como esta. Creamos el AVD y posteriormente le damos click en Start. Después de esto debemos esperar un tiempo considerable para que arranque el AVD pero una vez que arranca podemos correr nuestros programas sin necesidad de volver a esperar. Ademas es recomendable no cerrar la ventana para evitarnos el tener que volver a cargar el AVD.







Al final obtendremos algo como esto:


Corriendo el Hola mundo en el AVD.
Esto seria todo en este tutorial, a medida que avancemos iremos viendo las cosas con mas detalle pues seguramente para ser nuestra primera aplicación, ha sido bastante simple crearla pero una labor ardua el entenderla. No olviden que pueden comentar sus dudas.

No hay comentarios:

Publicar un comentario