eBook Programacion Android Español (Good)

download eBook Programacion Android Español (Good)

of 70

Transcript of eBook Programacion Android Español (Good)

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    1/70

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    2/70

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    3/70

    Muchos de los desarrolladores que se interesan por Android ven como barreras el sistema

    sofisticado de construccin que poseen estas aplicaciones a la hora de crearlas. Se confunden con

    temas como el parseo de datos XMLa Java, el uso de herramientas de compilacin automatizadascomo Gradlee incluso ven dificultad ante el idioma en que est escrita la gua de Desarrollo Android.

    Precisamente estas razones son las que provocaron queHermosa Programacin1comenzara a crear

    contenidos abiertos para el pblico que no solo explicarn las nociones del API de Android si no que

    ilustraran la compresin profunda y practica de estos conocimientos.

    El presente ebook tiene como fin ayudar a todos aquellos que an no han podido comprender como

    iniciarse en la programacin de Aplicaciones mviles para Android. Se explicarn los temas

    fundamentales para comprender una estructura de un proyecto en Android Studio, el uso de

    recursos, la importancia de las actividades, la programacin de eventos y una completa

    ejemplificacin digna. Cabe aclarar que es necesario conocimientos bsicos sobre el lenguaje Java

    y XML.

    Espero que esta lectura sea entretenida para ti y puedas romper las barreras entre el conocimiento y

    el trabajo de campo. Que tomes este pequeo ebook como una gua prctica hacia tus aspiraciones

    de desarrollo y compartas su utilidad con las personas ms necesitadas.

    1http://www.hermosaprogramacion.com

    http://www.hermosaprogramacion.com/http://www.hermosaprogramacion.com/http://www.hermosaprogramacion.com/http://www.hermosaprogramacion.com/http://www.hermosaprogramacion.com/http://www.hermosaprogramacion.com/http://www.hermosaprogramacion.com/
  • 7/26/2019 eBook Programacion Android Espaol (Good)

    4/70

    Estructura de un proyecto en Android Studio ................................................................................. 4

    Los directorios principales en Android Studio ............................................................................ 4

    Estructura de un Mdulo Android ............................................................................................. 6

    Recursos de una aplicacin Android ............................................................................................. 8

    Tipos de Recursos .................................................................................................................... 8

    Calificadores ........................................................................................................................... 10

    Los recursos string .................................................................................................................. 12

    Cmo acceder a los recursos? .................................................................................................. 13

    Acceder a los recursos en el cdigo ....................................................................................... 13

    Acceder a los recursos en XML .............................................................................................. 15

    Las actividades como principal componente de una aplicacin Android ........................................ 17

    Ciclo de vida de una Actividad .................................................................................................. 17

    La clase Activity ...................................................................................................................... 19

    El archivo AndroidManifiest.xml .................................................................................................. 21

    Disear la interfaz de una aplicacin Android con Layouts ........................................................... 23

    Tipos de Layouts en Android ................................................................................................... 24

    Entendiendo el RelativeLayout ................................................................................................ 27

    El RelativeLayout en Android Studio ..................................................................................... 29

    Manejar eventos cuando un View es presionado .......................................................................... 32

    Ejemplo de implementacin de OnClickListener .................................................................. 32

    MegaKalc: Aplicacin Android que opera dos nmeros enteros .................................................... 35

    Paso 1: Crear un nuevo proyecto en Android Studio ................................................................... 35

    Paso 2: Disea el layout de la actividad .................................................................................... 36

    Tarea 2.2: Aadir un RadioGroup .......................................................................................... 42

    Tarea 2.3: Aadir RadioButtons ............................................................................................ 44

    Tarea 2.4: Aadir EditTexts................................................................................................... 46

    Tarea 2.5: Aadir botn para operar ...................................................................................... 49

    Paso 3: Adaptadar el layout a la orientacin Landscape ............................................................ 53

    Tarea 3.1: Centrar la lnea divisoria ........................................................................................ 54

    Paso 4: Soportar strings en otro idioma .................................................................................... 58

    Paso 5: Programar comportamientos ....................................................................................... 59

    Conclusiones ............................................................................................................................ 66

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    5/70

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    6/70

    Ests emocionado porque instalasteAndroid Studio... al fin se han actualizado los componentes del

    SDK de Androidy tambin se configur el JDK de Java. Con emocin creas un nuevo proyecto deprueba, luego lo ejecutas y puedes ver como tu AVD reproduce un increble "Hello World!" .

    Sientes esa gran satisfaccin de logro y sonres a la vida, ya que diste tus primeros pasos en el

    desarrollo Android.

    LeetambinInstalar Android Studio2

    Peroqu pasa luego?...intentas realizar ms acciones con tu miniaplicacin que Android Studio

    ha creado automticamente, pero las carpetas y archivos que se encuentran en la jerarqua de tu

    proyecto te abruman con extensiones y nombres raros.

    Arrastras botones y campos de texto en la pestaa de diseo intentando llevar a cabo alguna accin.Navegas por todas las opciones del men superior, cambias variables, pruebas mtodos y nada

    funciona. Ni siquiera se te pasa por la cabeza leer la documentacin del sitio oficial o descargar un

    libro para entender mejor de que va esa condenada estructura de un proyecto Android.

    Pero no te preocupes, este apartado comienza por darte las luces necesarias para comprender la

    estructura de un proyecto en Android Studioy la forma en que se compone un Mdulo de Aplicacin.

    Al igual que otros IDEs, existe un panel donde se muestra la estructura del proyecto que se ha

    generado para comenzar a desarrollar la aplicacin. Esta estructura representa la jerarqua o

    esqueleto de tu espacio de trabajo y como desarrollador es primordial aprender a moverte sobre l.

    Esta gua ha sido creada con AndroidStudio1 2 estable, donde el proyecto tiene los siguientes

    contenidos.

    2http://www.hermosaprogramacion.com/2014/08/android-programar-app-como.html

    http://www.hermosaprogramacion.com/2014/08/android-programar-app-como.htmlhttp://www.hermosaprogramacion.com/2014/08/android-programar-app-como.htmlhttp://www.hermosaprogramacion.com/2014/08/android-programar-app-como.htmlhttp://www.hermosaprogramacion.com/2014/08/android-programar-app-como.html
  • 7/26/2019 eBook Programacion Android Espaol (Good)

    7/70

    A continuacin se muestra la definicin de cada archivo o directorio:

    .idea

    Sistema de archivos de intelliJ IDEAque contiene los archivos de configuracin del proyectoque se est desarrollando.

    app

    Representa el mdulo funcional de la aplicacin que se est desarrollando. Dentro de ella se

    encuentra todos los directorios y archivos que componen el aplicativo.

    Build

    Guarda un historial de las construcciones generadas del mdulo.

    gradle

    Contiene el archivo gradle wrapperpara la construccin automtica de la construccin.

    .gitignore

    Archivo deGitpara ignorar el seguimiento de la versin de otros archivos.

    build.gradle

    Permite configurar las caractersticas del sistema de construccin Gradle, como la inclusin

    de libreras de soporte, la certificacin de aplicaciones, versiones de compilacin, etc.

    gradle.properties

    En este archivo se pueden aadir lneas de comando para modificar las opciones de

    construccin de gradle.

    gradlew

    Script para iniciar gradle en el sistema operativoUnix.

    gradlew.bat

    Script para iniciar gradle en el sistema operativoWindows.

    local.properties

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    8/70

    Archivo del sistema de construccin que referencia la ubicacin del SDKen tu computadora.

    .iml

    Este archivo es parte del sistema de mdulos de IntelliJ. Su propsito es guardar toda lametainformacin del mdulo que ser construido en el proyecto.

    settings.gradle

    Contiene la definicin de los subproyectos que se construirn. Normalmente soloencontrars el modulo app.

    Este resumen demuestra que no es complicado el propsito de cada archivo y directorio, es ms,

    por el momento la mayora no interesan para comprender las bases del desarrollo Android. Como

    principiante debes enfocarte en la lgica de la programacin.

    Como acabas de ver, la carpetaapp

    es la representacin del mdulo de ejecucin de nuestra

    aplicacin y es all donde debemos enfocarnos a la hora de implementar la aplicacin y obtener un

    archivo.apk .

    Si despliegas su contenido se vern varios archivos y carpetas que componen la estructura de la

    aplicacin. Veamos una breve definicin para cada uno:

    Build

    En esta carpeta se ubican los archivos de las construcciones que se generan del mdulo. SUgestin es automtica por lo que no debemos preocuparnos por modificar o creardependencias aqu.

    libs

    Contiene libreras adicionales que defina el programador para extender las caractersticasdel mdulo.

    src

    Aqu se encuentran todos los archivos fuente Java de tu proyecto y los recursos necesariospara integrar el funcionamiento de la aplicacin.

    src/androidTest

    Contiene los casos de prueba de la aplicacin. El framework de Android brinda facilidad paragenerar casos de prueba conJUniten tus aplicaciones.

    src/main/java/

    Esta carpeta contiene el cdigo fuente java que construye la lgica y operatividad a laaplicacin.

    src/main/assets

    No encontrars creado este directorio, pero puedes generarlo para guardar recursos quetengan formato especial o sean tengan fines especficos, como archivos binarios, texturas otexto plano.

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    9/70

    src/res

    Contiene subcarpetas clasificadas por el tipo de recursos que usar tu aplicacin. Recursoscomo cadenas, enteros, imgenes, layouts, etc.

    src/AndroidManifiest.xml

    Archivo estandarizado en las aplicaciones Android que define el alcance y limitaciones de una

    aplicacin Android, como la cantidad de actividades que tiene, las versiones de Androiddonde la aplicacin se ejecutar, los permisos que requiere la aplicacin para acceder a datosexternos, etc. ( Puedes ver ms en la seccin .)

    .gitignore

    Archivo deGitpara ignorar el seguimiento de la versin de otros archivos.

    app.iml

    Representa la composicin del mdulo app para intelliJ.

    build.gradle

    Archivo de configuracin del sistema de construccin Gradle que permite personalizar las

    caractersticas de dependencia del mdulo.

    proguard-rules.pro

    Archivo de configuracin que optimiza el cdigo del mdulo para generar apks ms livianas.

    Por ahora ignoraremos los archivos del Sistema de Construccin Gradle, las Pruebas Unitarias, el

    Control de Versiones en Gity las Reglas ProGuard. La explicacin de cada uno de estos temas es

    especializada, por lo que sern temas de otros ebooks o artculos. Quiero que te concentres en los

    archivos fuente y los recursos, ya que son la base de las aplicaciones.

    Si te abrumas intentando comprender el significado de todas las instrucciones de esos archivos

    raros te desenfocars del objetivo quees implementar el cdigo de tu primera aplicacin Android.

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    10/70

    Los recursos son archivos externos destinados a soportar el comportamiento integral de una

    aplicacin. Estos pueden ser imgenes, cadenas, audios, archivos de texto, animaciones, etc. El

    hecho es que al ser independientes permiten a tu aplicacin adaptarse a cualquier configuracin endistintos dispositivos mviles. Configuraciones como el cambio de Orientacin de la Pantalla, la

    variacin del Idioma, seleccin de estndares de Teclado, las Dimensiones de la Pantalla, y mucho

    ms.

    Recuerda que en el apartado anterior vimos que por estndar se usa la carpeta res para guardar todos

    estos recursos. En su interior contiene subdivisiones respecto al tipo de recurso que se alberga.

    Cada uno de estos subdirectorios tiene un nombre especificado para la lectura de la aplicacin

    Android.

    Intentar crear carpetas de recursos distintas: Android trae automatizado y preconfigurado

    los tipos y nombres de recursos que pueden usarse, por lo que no se reconoceran carpetas

    con formatos distintos creadas por el programador.

    La siguiente tabla ilustra los tipos de recursos ms usados en un proyecto Android:

    Nombre del Directorio Contenido

    animator/ Archivos XML que contienen definiciones sobre animaciones.

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    11/70

    anim/ Archivos XML que contienen definiciones de otro tipo de

    animaciones.

    color/ Archivos XML que contienen definiciones de listas de estados de

    colores.

    drawable/ Contiene mapas de bits ( .png , .9.png , .jpg , .gif ) o archivo XMLque contienen definiciones de elementos especializados en el API de

    dibujo de Android.

    layout/ Archivos XML que contienen el diseo de interfaz de usuario.

    menu/ Archivos XML que contienen la definicin de la estructura de un men.

    raw/ Archivos con otro tipo de extensin.

    values/

    Archivos XML que contienen definiciones sobre valores simples como

    colores, cadenas y nmeros enteros. A continuacin algunas de las

    convenciones ms comunes:

    arrays.xml para arreglos

    colors.xml para colores

    dimens.xml para medidas

    strings.xml para cadenas

    styles.xml para estilos de la aplicacin

    xml/ Archivos XML que tienen como propsito ser ledos en tiempo real

    para alguna tarea de parsing o estructuracin.

    Un ejemplo de un recurso drawablees la imagen pngque representa el icono de la aplicacin. Si

    exploras su contenido notars que se le llamadaic_launcher.png .

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    12/70

    Un calificador es una notacin gramatical que condiciona el uso de los recursos en una aplicacin.

    Los calificadores estn directamente relacionados con las caractersticas del dispositivo donde se

    ejecuta la aplicacin Android.

    Como has visto cuando creas un nuevo proyecto en Android Studio, vienen una serie decarpetas drawable con diferentes nombres. Cada especificacin aadida ms un guion es un

    calificador que condiciona los recursos por el tipo de densidad de pantalla establecida. Por

    ejemplo drawable-hdpi contendr los recursos drawables que la aplicacin usar si es ejecutada

    en un dispositivo con alta densidad (ms de240dpipara ser exactos).

    En ese caso, el framework de Android ayudar a la aplicacin a elegir los drawables en el directorio

    correspondiente.

    La sintaxis para crear un calificador en un tipo de recurso es la siguiente:

    -

    Donde nombre_del_recurso es claramente el nombre del directorio, por ejemplo, values .

    Ycalificador es una notacin estandarizada que identifica el tipo de configuracin. Si deseas usar

    varios calificadores debes separar por guiones cada uno, por ejemplo:

    drawable-es-hdpi

    El anterior ejemplo adapta un conjunto de drawables a un dispositivo cuya configuracin se basa en

    el idioma Espaol ms una densidad de pantalla alta.

    Al igual que la densidad del dispositivo, tambin podemos encontrar un sin nmero de

    caractersticas de configuracin adicionales. A continuacin veremos una tabla que mostrar las

    categoras de calificadores ms populares:

    Configuracin

    Sintaxis del

    Calificador

    Definicin

    Idioma y Regin

    en

    fr

    en-rUS

    La sintaxis del lenguaje se establece en la

    normaISO 639-1, la cual explica que se usan

    dos letras descriptivas. Si deseas aadir la

    regin especfica, entonces usa la descripcin

    estipulada en la normarISO 3166-1-alpha-2.

    http://www.loc.gov/standards/iso639-2/php/code_list.phphttp://www.loc.gov/standards/iso639-2/php/code_list.phphttp://www.loc.gov/standards/iso639-2/php/code_list.phphttp://www.iso.org/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.htmlhttp://www.iso.org/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.htmlhttp://www.iso.org/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.htmlhttp://www.iso.org/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.htmlhttp://www.loc.gov/standards/iso639-2/php/code_list.php
  • 7/26/2019 eBook Programacion Android Espaol (Good)

    13/70

    fr-rFR

    fr-rCA

    Direccin de la escritura

    ldrtl

    ldltr

    Usa el valor ldrtlpara definir "layout-direction-

    right-to-left", es decir, escritura de derecha a

    izquierda. Y ldltr para expresar "layout-direction-left-to-right" o escritura de izquierda

    a derecha (que es el valor por defecto).

    Densidad mnima

    swdp

    Ejemplos:

    sw320dp

    sw600dp

    sw720dp

    Define la densidad mnima para filtrar los

    recursos de la aplicacin (SmallestWitdh).

    Ancho mnimo disponible

    wdp

    Ejemplos:

    w720dp

    w1024dp

    etc.

    Filtra por el ancho de pantalla actual de la

    pantalla en dps. Usa el identificador para

    establecer el nmero respectivo.

    Alto mnimo disponible

    hdp

    Ejemplos:

    h720dp

    h1024dp

    etc.

    Filtra por el alto mnimo que debe estar

    disponible en la pantalla del dispositivo. Usa

    el identificadorpara establecer el nmero

    respectivo en unidades dp.

    Tamao de la pantalla

    small

    normal

    large

    xlarge

    Permite configurar los recursos dependiendo

    del tamao de la pantalla. Por tamao

    entindase las siguientes resoluciones

    aproximadas:

    small: 320x426 dp

    normal: 320x470 dp

    large: 480x640 dp

    xlarge: 720x960 dp

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    14/70

    Proporcin de la pantalla

    long

    notlong

    Se usa la proporcin o ratio de la pantalla del

    dispositivo para incluir los recursos.

    long: Pantallas largas como los formatos

    WQVGA, WVGA, FWVGA.

    notlong: Pantallas cortas como QVGA, HVGA,

    and VGA.

    Orientacin de la pantalla

    port

    land

    port: El dispositivo se despliega como

    portarretrato o verticalmente

    land: El dispositivo se despliega

    horizontalmente.

    Densidad de la pantalla (dpi)

    ldpi

    mdpi

    hdpi

    xhdpi

    xxhdpi

    xxxhdpi

    nodpi

    ldpi: Low-density, densidades de mximo

    120dpi.

    mdpi: Medium-density, mximo 160dpi.

    hdpi: High-density, mximo 240dpi.

    xhdpi: Extra-high-density, mximo 320dpi

    xxhdpi: Extra-Extra-High-Density, mximo

    480dpi.

    xxxhdpi: Extra-extra-extra-high-density

    mximo 640dpi.

    nodpi: aqu puedes situar objetos que noquieres redimensionar sea cual sea la

    densidad.

    Versin de Android o nivel del

    API

    Ejemplos:

    v3

    v4

    v7

    etc.

    Nivel del API soportado por el dispositivo. Por

    ejemplo v16 para referirse a los dispositivos

    con AndroidJellyBeans4.1.

    Para aquellos recursos que contienen informacin de texto se debe usar el archivo strings.xml. Este

    contiene una serie de tems con un identificador llamado name y su contenido respectivo.

    Si abres este archivo ubicado en la carpetavalues, vers una definicin parecida a la siguiente:

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    15/70

    TestHello world!Settings

    Este archivo de recursos debe contener como nodo principal la etiqueta para hacer

    nfasis en la creacin de recursos. Cada cadena de texto debe ser declarada dentro de

    elementos , donde su clave se establece con el atributoname y el contenido va en lnea.

    Existen dos formas para acceder a un recurso: En el cdigo a travs de la clase R o en definiciones

    XML.

    Acceder a los recursos en el cdigo

    Para acceder en el cdigo debes referirte a la clase R.java , un archivo especial que es generado

    automticamente cuando tu aplicacin Android es compilada. Esta clase contiene la referencia a

    todos los recursos que usars en tu proyecto. Cada referencia est declarada como un nmero

    hexadecimal ligado al recurso lgico. Las tipos de recursos son representados por clases internas ysus atributos son los recursos particulares como tal.

    Veamos un ejemplo de cmo luce el archivo:

    /*AUTO-GENERATED FILE. DO NOT MODIFY. ** This class was automatically generated bythe* aapt tool from the resource data itfound. It* should not be modified by hand. */

    packagecom.TUPAQUETE.test;

    publicfinalclassR {publicstaticfinalclassattr {}publicstaticfinalclassdimen {

    publicstaticfinalintactivity_horizontal_margin=0x7f040000;publicstaticfinalint activity_vertical_margin=0x7f040001;

    }publicstaticfinalclassdrawable {

    publicstaticfinalint ic_launcher=0x7f020000;

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    16/70

    }publicstaticfinalclassid {

    publicstaticfinalintaction_settings=0x7f080000;}publicstaticfinalclasslayout {

    publicstaticfinalint activity_my=0x7f030000;}

    publicstaticfinalclassmenu {publicstaticfinalint my=0x7f070000;

    }publicstaticfinalclassstring{

    publicstaticfinalintaction_settings=0x7f050000;publicstaticfinalintapp_name=0x7f050001;publicstaticfinalinthello_world=0x7f050002;

    }publicstaticfinalclassstyle {

    /** Customize your theme here.*/

    publicstaticfinalintAppTheme=0x7f060000;}

    }

    Para llamar un recurso mediante a la claseR , simplemente debes seguir la siguiente sintaxis:

    [].R..

    Es el nombre del paquete en que se encuentra el recurso. Si el recurso es de tu propio proyecto no

    requiere este parmetro.

    Representa que tipo de recurso buscars. Por ejemplo si buscas un String entonces usas la subclase

    string .

    Si buscas un archivo, entonces es el nombre de este. Si lo que buscas es un valor simple definido en

    XML, entonces usas el atributoandroid:name de dicho recurso.

    Un ejemplo de acceso sera el siguiente:

    TextViewtitulo =(TextView)findViewById(R.id.textoTitulo);Titulo.setText(R.string.titulo);

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    17/70

    La primer lnea obtiene unTextView y en la segunda se le asigna una cadena guardada en un string

    llamado ttulo, que ha sido definido en el archivostrings.xml .

    Recuerda que el API de Android nos provee todos los recursos que usa el sistema operativo en sus

    aplicaciones y comportamiento corriente. Para accederlos debes hacer referencia al paquete

    Android, donde encontrars una claseR que proporciona el acceso correspondiente.

    Acceder a los recursos en XML

    Similar que en el cdigo Java, los recursos pueden ser accedidos a travs de referencias XML con la

    siguiente sintaxis:

    @[:]/

    En este caso se usa el smbolo @ para navegar en el DOM de cada recurso XML definido conanterioridad. Si el recurso se encuentra en el paquete de tu aplicacin no debes usar el nombre. Pero

    si est por ejemplo en el paquete de Android, entonces usa android .

    Ejemplo:

    Como ves, se le asigna al atributoandroid:text el stringtitulo. Si quisieras asignar un color del

    paquete Android al fondo de un view puedes acceder de la siguiente forma:

    android:background="@android:color/holo_blue_light"

    Donde holo_blue_light es un recurso de tipo color predeterminado para el temaHoloLightde

    Android.

    Lee tambinDisear Temas y Estilos para tus Aplicaciones Android3

    3http://www.hermosaprogramacion.com/20h14/10/android-temas-estilos.html

    http://www.hermosaprogramacion.com/2014/10/android-temas-estilos.htmlhttp://www.hermosaprogramacion.com/2014/10/android-temas-estilos.htmlhttp://www.hermosaprogramacion.com/2014/10/android-temas-estilos.htmlhttp://www.hermosaprogramacion.com/20h14/10/android-temas-estilos.htmlhttp://www.hermosaprogramacion.com/20h14/10/android-temas-estilos.htmlhttp://www.hermosaprogramacion.com/20h14/10/android-temas-estilos.htmlhttp://www.hermosaprogramacion.com/20h14/10/android-temas-estilos.htmlhttp://www.hermosaprogramacion.com/2014/10/android-temas-estilos.html
  • 7/26/2019 eBook Programacion Android Espaol (Good)

    18/70

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    19/70

    Una actividad es un "pantallazo" de tu aplicacin. Acta como el contenedor principal de todos los

    componentes de interfaz siendo un equivalente a las ventanas que abren los sistemas operativos de

    escritorio.

    Por ejemplo, el home deGooglePlayes una actividad:

    Y cada una de las secciones de pantalla completa por donde vayas navegando es una actividad. En

    ellas se despliega todo el poder del diseo artstico y programtico para obtener el mejor

    rendimiento y experiencia de usuario.

    Las actividades actan como entidades vivas ante las acciones del usuario o del sistema. Ellas se

    autogestionan de tal modo que el programador solo automatice su comportamiento y se libre de la

    responsabilidad de iniciarlas, destruirlas, reanudarlas, dibujarlas, pausarlas, etc.

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    20/70

    Este comportamiento es posible gracias al ciclo de vida de la actividad, el cual se cre para

    automatizar las acciones de una actividad en el sistema. Si has estudiado autmatas podrs hacerte

    una idea del flujo de trabajo que se emplear.

    Cuando Android inicia la Actividad Principalde una aplicacin, esta comienza a atravesar por una

    serie de estados que le permiten definir su comportamiento. No importa lo que pase en el sistema,

    la actividad siempre tendr un curso definido de operacin.

    El rol del programador es solo definir qu acciones ocurrirn en la transicin de estado a estado para

    que se cumpla el objetivo de la aplicacin.

    La siguiente ilustracin muestra el ciclo de vida de una actividad:

    Cadatransicinentre estados es representada por mtodos callback en la API de Android. Recuerda

    que un mtodo callback es un mtodo que se llama automticamente por el sistema en el momentoque este lo requiera. El programador no tiene control sobre esta ejecucin, pero si puede

    sobrescribir los mtodos para que se lleven a cabo tareas personalizadas.

    A continuacinse explica cada estado de la actividad y sus respectivas transiciones:

    Creada: Una actividad se ha creado cuando su estructura se encuentra en memoria, pero

    esta no es visible aun. Cuando el usuario presiona sobre el icono de la aplicacin en su

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    21/70

    dispositivo, el mtodo onCreate() es ejecutado inmediatamente para cargar el layout de

    la actividad principal en memoria.

    Ejecutada: Despus de haber sido cargada la actividad se ejecutan en secuencia a el

    mtodoonStart() y onResume() . AunqueonStart() hace visible la actividad, es

    onResume() quien le transfiere el foco para que interacte con el usuario.

    Pausada: Una actividad est en pausa cuando se encuentra en la pantalla parcialmente

    visible. Un ejemplo sera cuando se abren dilogos que toman el foco superponindose a la

    actividad. El mtodo llamado para la transicin hacia la pausa es onPause() .

    Detenida: Una actividad est detenida cuando no es visible en la pantalla, pero an se

    encuentra en memoria y en cualquier momento puede ser reanudada. Cuando una

    aplicacin es enviada a segundo plano se ejecuta el mtodoonStop() . Al reanudar la

    actividad, se pasa por el mtodo onRestart() hasta llegar a el estado de ejecucin y

    luego al de reanudacin.

    Destruida: Cuando la actividad ya no existe en memoria se encuentra en estado de

    destruccin. Antes de pasar a destruir la aplicacin se ejecuta el mtodo onDestroy() . Es

    comn que la mayora de actividades no implementen este mtodo, a menos que deban

    destruir procesos (como servicios) en segundo plano.

    Este ebook se enfocar en el mtodo onCreate() , debido a que es la base de la construccin de la

    actividad porque se incorporan las declaraciones de interfaz y controles. Los otros mtodos se

    sobrescriben en situaciones ms avanzadas, como por ejemplo, conservar datos cuando laaplicacin se minimiza, cuando se cierra la aplicacin, etc.

    Otro aspecto a tener en cuenta es la existencia de una actividad principal en toda aplicacin Android.

    Esta se caracteriza por ser aquella que se proyecta primero cuando el usuario hace Tapen el icono

    de la aplicacin en su escritorio.

    Las actividades en el API de Android se representan por la clase Activity . Si ves tu proyecto de

    Android Studio, veras que ha creado una nueva clase que hereda de Activity . Normalmente su

    contenido es la sobrescritura del mtodo onCreate() y otros mtodos relacionados con un

    componente llamadoAction Bar.

    Veamos un ejemplo:

    publicclassMyActivityextendsActivity{

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    22/70

    @OverrideprotectedvoidonCreate(BundlesavedInstanceState){

    super.onCreate(savedInstanceState);setContentView(R.layout.activity_my);

    }

    @Override

    publicbooleanonCreateOptionsMenu(Menumenu){// Inflate the menu;this adds items to the actionbar if it is present.

    getMenuInflater().inflate(R.menu.my,menu);returntrue;

    }

    @OverridepublicbooleanonOptionsItemSelected(MenuItemitem){// Handle action bar item clicks here. The actionbar will// automatically handle clicks on the Home/Upbutton, so long// as you specify a parent activity inAndroidManifest.xml.

    intid =item.getItemId();if(id ==R.id.action_settings){

    returntrue;}returnsuper.onOptionsItemSelected(item);

    }}

    El mtodo onCreate() del cdigo anterior tiene dos instrucciones necesarias en cualquier

    actividad, la llamada a la referenciasuper obligatoria de la superclase y la creacin del contenido a

    travs de un recurso layout consetContentView() .

    Si puedes notar, se accede a un recurso layout con R.layout.activity_my como parmetrodesetContentView() . Esto se debe a que internamente se lleva a cabo el proceso de "inflado" de

    la interfaz. Cuando leas o escuches este trmino debes saber qu hace referencia al proceso de

    convertir definiciones de elementos XML en objetos Java, es decir, un proceso de parsing.

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    23/70

    Este archivo es como el pegamento entre los componentes de las aplicaciones para que funcionen

    como un todo dentro de Android. Cada aplicacin debe contenerlo obligatoriamente debido a que la

    compilacin y parsing se orienta en su contenido.

    El archivoAndroidManifiest.xml acta como un indicador de las caractersticas de tu aplicacin,

    estableciendo todos los componentes que tiene, sus limitaciones, los permisos que necesita, las

    versiones de Android donde correr tu aplicacin, etc.

    Lee tambinTutorial bsico del lenguaje XML

    Su definicin XML se inicia con el elemento raz , el cual debe contener un

    nodo que represente la existencia de una aplicacin.

    Veamos un ejemplo tpico para un proyecto en blanco de Android Studio:

    Un archivoAndroidManifiesttiene las siguientes caractersticas:

    El nodo raz hace referencia al namespace android definido en el API de Android.

    Tambin usa el atributo package para referenciar el paquete donde se alberga el cdigo fuente de

    tu aplicacin.

    Es obligatorio que contenga un elemento para declarar la presencia de una

    aplicacin Android. Este elemento puede contener cualquier tipo de componentes. Generalmente

    http://www.hermosaprogramacion.com/2014/08/xml-lenguaje.htmlhttp://www.hermosaprogramacion.com/2014/08/xml-lenguaje.htmlhttp://www.hermosaprogramacion.com/2014/08/xml-lenguaje.htmlhttp://www.hermosaprogramacion.com/2014/08/xml-lenguaje.html
  • 7/26/2019 eBook Programacion Android Espaol (Good)

    24/70

    siempre veremos un elemento para aadir una actividad dentro de la aplicacin. Cada

    bloque de construccin que exista dentro de la aplicacin se refiere a una clase Java que debe haber

    sido declarada con anterioridad.

    Para relacionar ambos entornos se usa el atributo android:name de los bloques con el fin de

    establecer el nombre del archivo java que contiene su referencia programtica. En el ejemplo anterior

    el nodo se liga conMainActivity .

    El atributo android:label se refiere al ttulo que desplegar la actividad en los lugares que se

    referencie (como la Action Bar). Normalmente Android Studio crea por defecto el string app_name ,

    el cual contiene el nombre que asignaste en el asistente de creacin del proyecto.

    En el apartado la seccin 3 se declar que las aplicaciones Android siempre tendrn una actividad

    principal. Precisamente los elementos y configuran esta

    caracterstica. La propiedad android.intent.action.MAIN especifica que la actividad en

    cuestin es la principal y que adems ser la primera que se iniciar ante el usuario

    (android.intent.category.LAUNCHER ). Este tema es ms avanzado, por lo que la explicacin se

    escapa de este ebook.

    Recuerda aadir cada actividad nueva declarada en tu cdigo como

    elemento en el AndroidManifiest.xml . Regularmente no es necesario

    porque Android Studio lo har por ti, pero muchas personas redactan sus actividades desde

    cero y olvidan declararlas.

    La compilacin genera 2 Apks: esto suele suceder debido a que se declaran dos actividades

    con la propiedad LAUNCHER . Elige solo una actividad para la ejecucin inicial.

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    25/70

    La definicin deLayoutse desprende de la definicin deView. Un View es un componente que tiene

    representacin grfica, el cual puede ser desplegado en pantalla y adems puede tener interaccin

    con el usuario. Ejemplos de estos son los botones, campos de texto, etiquetas, listas, radios, etc.

    Ahora, un Layout es un View que contiene ms views. Su fin es proporcionar al programador un

    mecanismo para crear un diseo ptimo de los views que estarn disponibles para el usuario y su

    interaccin.

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    26/70

    Los layouts programticamente son subclases de la superclase ViewGroup , de la cual heredan sus

    atributos y comportamiento de contenedores. Aunque se pueden crear layouts personalizados, la

    API ya trae consigo implementaciones prefabricadas para no complicarse la vida.

    Estas instancias fueron creadas con el fin de generar layouts de uso frecuente y flexible para los

    desarrolladores. Si ya has ledo con anterioridad sobre el tema, recordars nombres como

    LinearLayout,RelativeLayout,GridViewyWebView.

    A continuacin se ver una breve definicin de las clases que representan los layouts ms populares:

    FrameLayout

    Este layout bloquea secciones de la pantalla para mostrar un elemento por cada seccin.

    LinearLayout

    Organiza los elementos en forma de filas o columnas.

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    27/70

    GridLayout

    Este tipo de Layout tiene la capacidad de ubicar a sus hijos en forma de una grilla rectangular. Sebasa en el recorrido de los ndices que sectorizan sus celdas para aadir cada view.

    RelativeLayout

    Este es uno de los views ms utilizados, debido a que acomoda sus hijos con posiciones relativas.

    Cuando digo relativas, me refiero a que dependiendo de la ubicacin de un view se determinar laposicin de otro, lo que permite un ajuste instantneo por si en algn momento las pociones

    cambian.

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    28/70

    WebViewMuestra contenido web parseando cdigo HTML.

    La primera seccin de la paleta de componentes en Android Studio precisamente se llama Layouts,

    donde encontrars varios de estos elementos:

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    29/70

    El RelativeLayout es uno de los layouts ms populares y usados para crear diseos flexibles y

    suavizados. Con este tipo de organizacin se puede representar un gran nmero de distribuciones

    de views a travs de referencias sencillas. A diferencia de otros layouts que requieren contener aotros layouts para estructurar el diseo, situacin que reduce el rendimiento de la aplicacin.

    Muchos desarrolladores se confunden a la hora de emplearlo, ya que las referencias pueden llegar a

    ser confusas si el conocimiento de ingls no es intuitivo.

    Cuando digo referencias me refiero a que no expresaremos la ubicacin de los componentes de esta

    forma:

    "El botn OK estarubicado en el punto (200, 120) del layout y sus dimensiones son 200x30 dp"

    A esa definicin de atributos se le llama definicinabsoluta, y describe con pelos y seales cuales

    son las medidas numricas para el View.

    A diferencia de esa declaracin, dentro de un RelativeLayout usaremos expresiones como la

    siguiente:

    "El botn OK estar ubicado a la izquierda del extremo derecho del TextView 2 y sus dimensiones

    sern ajustadas al padre"

    Qu significa eso?, quiere decir que no importa de qu tamao sea la pantalla o que densidad

    maneje, el botn se ajustar relativamente a las condiciones que se le han impuesto, lo cual permite

    una mejor experiencia para distintos usuarios sin importar las caractersticas de su dispositivo.

    Ahora, para llevar estas descripciones a un view en su declaracin XML se han de usar atributos

    especializados. Atributos que permiten acomodar el view en relacin a su padre u otro view. Veamos

    algunos:

    android:layout_above

    Ubica el borde inferior del view en cuestin sobre el view que se declar en su valor.

    android:layout_below

    El borde superior del view es ubicado por debajo del view asignado.

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    30/70

    android:layout_toRightOf

    El borde izquierdo del view es ubicado al lado derecho de otro.

    android:layout_toLeftOf

    El borde derecho del view es ubicado al lado izquierdo de otro.

    android:layout_alignTop

    El borde superior del view es alineado con el borde superior del relative layout.

    Existen muchos ms atributos que se refieren a los lados restantes que podemos utilizar. Todos son

    intuitivos si conoces el significado en espaol de los adverbios empleados.

    Puedes conocer todos los atributos disponibles en la claseRelativeLayout.LayoutParams4.

    Por ejemplo, la siguiente ilustracin muestra dos views alineados en un RelativeLayout. El

    RadioButton se encuentra alineado a la izquierda del botn y adems su borde superior coincide

    tambin:

    Android Studiovisualiza las posibles referencias entre views en su seccin de diseo. No

    obstante se vuelve complejo a medida que se aaden ms views, ya que las relaciones no se

    entienden o no son las ms acordes. En este caso es necesario asignar las relaciones

    manualmente en elPanel de Propiedades.

    Veamos otro ejemplo donde un CheckBox se alinea a los bordes superior y derecho del

    RelativeLayout :

    4http://developer.android.com/reference/android/widget/RelativeLayout.LayoutParams.html

    http://developer.android.com/reference/android/widget/RelativeLayout.LayoutParams.htmlhttp://developer.android.com/reference/android/widget/RelativeLayout.LayoutParams.htmlhttp://developer.android.com/reference/android/widget/RelativeLayout.LayoutParams.htmlhttp://developer.android.com/reference/android/widget/RelativeLayout.LayoutParams.html
  • 7/26/2019 eBook Programacion Android Espaol (Good)

    31/70

    El RelativeLayout en Android Studio

    Android Studio provee un sistema muy interesante en la seccin de diseo. Cuando se estn

    distribuyendo los elementos este resume los atributos de referencia dentro del panel de propiedades

    de cada view.

    La anterior ilustracin visualiza todos los atributos que un view dentro de un RelativeLayout

    puede adquirir. Sin embargo para los atributos de relacin entre views aparece una propiedad

    llamadalayout:alignComponent , la cual contiene a todos los atributos de ubicacin.

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    32/70

    El sistema funciona de la siguiente manera: Existen una serie de pares de alineacin, donde el primer

    trmino es el borde del view actualmente seleccionado y el segundo trmino es el borde del view

    con el que se quiere relacionar.

    Ejemplo: Si quieres que el margen derecho de tu componente colinde con el borde izquierdo de otro

    view, entonces usas el parright:left. Solo se elige entre la lista que se despliega para seleccionar el

    view necesario.

    Esta sintaxis actualizar directamente la definicin de tu view, modificando el valor de su

    atributoandroid:layout_toLeftOf :

    android:layout_toLeftOf="@+id/Texto"

    Adicionalmente existen las propiedades layout:alignParent y layout:centerInParent . La

    primera contiene resumidamente las caractersticas de relacin entre un view y el padre. Puedes usar

    check boxespara seleccionar la que desees.

    En la segunda propiedad puede elegir tres opciones de centrado con respecto al padre: centrado

    horizontal,centradovertical,amboscentrados. Cada una de estas elecciones hace referencia a los

    atributos de referencia y se irn actualizando en la definicin XML cuando los elijas.

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    33/70

    Al probar todas estas propiedades sentirs la flexibilidad del RelativeLayout . Te recomiendo

    probar cada uno de los comportamientos de este sistema de diseo, ya que ms adelante necesitars

    estos conocimientos.

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    34/70

    En este apartado estudiaremos de qu forma aadir comportamiento a las aplicaciones Android a

    travs del diseo de escuchas que maneja Java.

    Recuerda que una escucha es un objeto relacionado a otro objeto, cuyo fin es estar pendiente a las

    acciones que lo afectan en el exterior. Su trabajo es registrar estos sucesos y notificarlo al entorno

    principal para que se tomen acciones preprogramadas y dirigir correctamente el flujo.

    Los eventos con mayor frecuencia de ocurrencia son los eventos de entrada a travs de los

    dispositivos de interfaz humana, como lo son los mouses, teclados, joysticks, o en este caso el tap

    de una pantalla mvil o el acelermetro.

    Ejemplo de implementacin de OnClickListener

    OnClickListener es una interfaz quepermite implementar acciones cuando un view es presionado

    en la interfaz por el usuario. Para implementarla lo primero que debes realizar es relacionar la interfaz

    OnClickListener ya sea a travs del uso de interfaz en la actividad donde se encuentra el botn o

    creando una nueva clase annima y setearla en el atributo interno del botn:

    publicclassMainActivityimplementsOnClickListener{/*Se usa el operador this para referirnos a quela instancia es la misma clase contenedora*/boton.setOnClickListener(this);

    }

    El mtodo setOnClickListener() asigna al botn declarado la instancia de la clase que

    implementa la interfazOnClickListener , que en este caso es la misma clase contenedora.

    Luego se debe diligenciar el contenido del mtodo callbackonClick() . Sin l, la escucha no tendra

    sentido, ya que debe existir para dirigir los eventos registrados hacia su contenido.

    @OverridepublicvoidonClick(Viewview){

    // Acciones que ocurrirn}

    Dentro de este mtodo debes ubicar todas las acciones que desees que ocurran al presionarse el

    botn. Recibe un parmetro de tipo View , el cual hace alusin a la instancia del botn seleccionado.

    Otra forma de usar esta interfaz es creando una clase annima en lnea:

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    35/70

    boton.setOnClickListener(newOnClickListener(){@OverridepublicvoidonClick(Viewview){

    ...}

    });

    Otra forma de aadir la relacin a la escucha es a travs de la propiedad de los view llamada

    android:onclick . En el puedes asignar cualquier mtodo que tenga la forma de onClick() , pero

    obviamente el mtodo debe estar previamente definido, retornar en void y recibir como parmetro

    un objeto de tipoView .

    Por ejemplo, voy a declarar un mtodo llamadosumar() , el cual actuar comoonClick.

    publicvoidsumar (Viewv){suma =a+b;

    }

    Ahora supn que este mtodo debe ejecutarse cuando se presione el botn. As que voy al panel de

    propiedades de Android Studio y se lo asigno directamente:

    O a travs de la definicin XML:

    android:onClick="sumar"

    Cul es la diferencia entre usar estos tres caminos?, normalmente crear clases annimas o asignarmtodos directos en el layout es ideal para actividades que monitorean a lo mximo 2 views.

    No obstante existirn casos especiales donde mltiples views estn registrados para recibir eventos

    de toque. Por lo que la primera opcin funciona de maravilla, ya que puedes estar alerta de todos los

    elementos que estn dentro de la actividad a travs de una estructura de seleccin mltiple:

    @OverridepublicvoidonClick(Viewv){

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    36/70

    intidView =v.getId();

    switch(idView){caseR.id.primerView:

    // accionesbreak;

    caseR.id.segundoView:

    // accionesbreak;

    caseR.id.enesimoView:

    // accionesbreak;

    }}

    El ejemplo anterior ilustra que dependiendo del id obtenido y la confrontacin con los ids

    registrados en la clase R se implementarn las acciones necesarias.

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    37/70

    El siguiente ejemplo es bsico, por lo que te permitir familiarizarte con el entorno de Android Studio

    y la dinmica del diseo e implementacin de interfaces.

    El objetivo de la aplicacinMegaKalces sencillo, operar dos nmeros que el usuario ingrese en los

    campos. Adems de eso se aadir una radio para que seleccione una de las cuatro operaciones

    bsicas de la aritmtica: suma, resta, multiplicacin y divisin.

    Primero lo primero. Inicia Android Studio y crea un proyecto que se llame MegaKalc con unaactividad en blanco (Blank Activity). Deja por defecto el nombre de la actividad como

    MainActivity.java y su layout comoactivity_main.xml .

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    38/70

    Antes de comenzar a programar el comportamiento de MainActivity primero se debe disear su

    contenido visual. Aunque la envergadura de este proyecto es mnima, siempre es una buena prctica

    que el diseador de UI en tu equipo (si eres desarrollador independiente, entonces sers t) dibuje

    una serie de bocetos que reflejen la accesibilidad e interacciones del posible layout.

    En este caso se cre el siguiente boceto:

    Con ello ya tenemos claro de qu forma acomodar los views que necesarios dentro del archivo

    activity_main.xml .

    El primer mensaje que se muestra es un TextView con una cadena informativa que guardaremos en

    strings.xml . Para agregarlo al layout iremos a la paleta de views, te ubicars en la seccin

    Widgetsy arrastrars unLarge Text:

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    39/70

    El espacio de diseo de Android Studio muestra un tooltip emergente que te indica la posicin

    relativa donde se ubicar. La imagen anterior despliega el mensaje "centerHorizontal +

    alignParentTop" , que significa que elTextView estar centrado horizonalmente con respecto al

    padre yalignParentTopse refiere a que el elemento alinear su parte superior a la parte superior

    delRelativeLayout .

    Ahora cambia el atributo id delTextViewen el panel de propiedades para ajustar el nombre del

    elemento a las convenciones de cdigo que use tu equipo de desarrollo. En mi caso particular uso

    notacincamelCasems una agregacin del tipo de view. Siguiendo este estndar asignar el id

    detextoInformacion .

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    40/70

    A continuacin reemplazaremos el texto que trae como predeterminado y aadiremos un nuevo tem

    al archivo strings.xml para referirnos al valor externamente. As que ve al atributotext del text

    view y presiona el botn

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    41/70

    Se desplegar un administrador de los strings que tienes en el proyecto y aquellos que son propiosdel sistema (puedes explorar en ambas pestaas,Projecty System).

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    42/70

    Si eres buen observador, vers que se ha seleccionado el temapp_name y su valor actual se muestra

    en un previsualizador de la parte inferior. En este administrador puedes decidir si usar un valor de la

    lista de strings que se encuentra actualmente (Si es que ya has definido previamente tu string

    manualmente) o crear un string nuevo desde interfaz.

    Debido a que no se tiene un string que contenga la cadena de textoInformacion , entonces

    crearemos uno nuevo a travs del botn desplegable New Resource. En cuanto es presionadoaparece una opcin llamadaNew String Value

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    43/70

    Al acceder a la nueva creacin de un valor string se ejecuta el siguiente formulario:

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    44/70

    Por el momento solo se diligencia el nombre del string que en este caso por comodidad se usa el

    mismo id del textView. Y el contenido del string ser el texto que vimos en el boceto anterior.

    En la parte inferior se encuentran los directorios donde se aadir el nuevo string. Por el momento

    se encuentra el directorio values por defecto y otro values con calificadorw820dp. De acuerdo a

    tus necesidades selecciona el directorio en que actuar el string.

    Presiona Oky la cadena se crear y asignar.

    Tarea 2.2: Aadir un RadioGroup

    El siguiente elemento que aadiremos ser un RadioGroup para generar exclusin entre varios

    RadioButtons .

    Dirgete a la paleta de views en la seccin Containersy selecciona el elementoRadioGroup. Luego

    sitalo en el lmite inferior del textview. Vers que aparecer un tooltip con el mensaje "center

    Horizontal + below=textoInformacion" . Ya sabes el significado de la primera sentencia, en

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    45/70

    cuanto a la segunda parte, se refiere a que el lmite superior del radiogroup se ubicar en el lmite

    inferior (below) del textview (o la asignacin del atributoandroid:below_view ).

    Lo siguiente es establecer las dimensiones del radiogroup ajustadas al contenido que se le

    establezca. Lo que quiere decir que sus atributos android:layout_width y

    android:layout_height se les asignar la constante wrap_content .

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    46/70

    No olvides asignarle un id.

    Tarea 2.3: Aadir RadioButtons

    El siguiente movimiento es aadir cadaRadioButton dentro delRadioGroup . Esto se hace yendo

    a la paleta en la seccinWidgetsy arrastrando el componenteRadioButtonhacia el grupo.

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    47/70

    Una vez arrastrado los cuatro radios cambiales su id a radioSuma , radioResta ,

    radioMultiplicacion y radioDivisin . Luego aade 4 strings con los valores "Suma" ,

    "Resta" ,"Multiplicacin" y "Divisin" . Concluye asignndolas a cada radio en el orden en

    que fueron declaradas.

    Hasta aqu se ha creado la primera seccin de la interfaz, que se constituye de los views necesarios

    para que el usuario tome una decisin.

    A continuacin se aadir un View personalizado para dividir el contenido, el cual representar una

    lnea divisoria.

    Para aadirlo accede a la definicinXMLdeactivity_main.xml y aade la siguiente etiqueta:

    Este view personalizado ajusta su ancho a la dimensin del padre, tiene una altura de 1dp para simule

    el grosor de una lnea recta y adems se cambi su backgrounda un color oscuro que resalte en el

    layout.

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    48/70

    Tarea 2.4: Aadir EditTexts

    El usuario tendr a su disposicin campos de texto para ingresar 2 nmeros enteros. Estos se

    encuentran en la seccinTextFieldsde la paleta. Vers que hay varias opciones en cuanto al formato

    de los datos que soportan, como fecha, email, nmeros, nombres, etc.

    Todos son el mismo componenteEditText , solo se diferencian en el valor de un atributo llamado

    android:inputType , el cual recibe una serie de constantes que se refieren al tipo de entrada

    aceptada. Ya tenemos claro que los campos que usaremos solo aceptarn nmeros, as que arrastra

    el primero como se muestra en la siguiente ilustracin:

    alignParentLeft significa que el borde izquierdo del campo de texto estar alineado al borde

    izquierda del RelativeLayout . Adicionalmente el borde superior estar por debajo (below) de la

    lnea de divisin y se aadirn 40dps de margen superior entre ambos. Es necesario disminuir su

    ancho a 80dp en su atributoandroid:layout_width si queremos conservar una visibilidad afable.

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    49/70

    Ahora aade un texto informativo para el usuario con el atributoandroid:hint ubicado en el panel

    de propiedades. Recuerda que el boceto tena la cadena "x" en este campo (Si quieres centra el

    texto conandroid:gravity= "center_horizontal" ):

    En seguida aade unTextView para ubicar el operador matemtico correspondiente.

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    50/70

    Se indica que el borde izquierdo del texto estar junto al lado derecho del campo de texto y que

    estarn alineados al mismo nivel en su borde superior. Tambin necesitamos que ambos limites

    inferiores estn alineados para que sean del mismo tamao, as que asigna a la

    propiedadlayout:alignComponenten su campobottom:bottomalEditText .

    Teniendo claras las referencias de lmites en los views prueba ubicar todos los views en la operacin

    como se muestra en el diseo. Modifica los atributos como ms te parezca y aade tu toque personal.

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    51/70

    Tarea 2.5: Aadir botn para operar

    Finalmente aadiremos el botn que permitir calcular el resultado de los dos nmeros que el

    usuario ha introducido al formulario. Ve a la paleta y elige el widget Button y lo aades al layout.

    Es necesario que su borde inferior est alineado al borde inferior del padre y estar centrado

    horizontalmente.

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    52/70

    Finalmente la definicin XML del archivoactivity_main.xml sera la siguiente:

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    53/70

    android:id="@+id/radiosOperaciones"android:layout_marginTop="20dp"android:layout_above="@+id/customLinea">

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    54/70

    android:layout_alignTop="@+id/editNumeroX"android:layout_toRightOf="@+id/editNumeroX"android:layout_toEndOf="@+id/editNumeroX"android:layout_alignBottom="@+id/editNumeroX"android:gravity="center_vertical"/>

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    55/70

    En esta seccin veremos cmo crear un layout especial para cuando los dispositivos roten hacia la

    orientacin landscape.

    Para ello se debe crear una carpeta con un calificador del tipo layout-land , la cual contendr el

    layout adaptado. Si bien, esto puede realizarse manualmente, es ms fcil realizarlo con laaccesibilidad de Android Studio. Solo debes ubicarte en el layout original que deseas migrar a

    landscape y presionar el icono de configuracin del layout:

    Al presionarlo se despliegan varias opciones, pero la que har el trabajo se denomina Create

    LandscapeVariation. Si la ejecutas se crear automticamente el directorio para layouts Landscape

    y se conservarn los mismo views que tienes actualmente.

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    56/70

    Con este procedimiento se nota que el diseo Portrait que se haba creado no es efectivo en

    orientacin horizontal. As que dividiremos los contenidos de la aplicacin MegaKalc en dos

    secciones verticales. Del lado izquierdo irn los radios y en el lado derecho los campos de texto y el

    botn.

    Tarea 3.1: Centrar la lnea divisoria

    Comienza por intercambiar las medidas de la lnea divisoria, para que quede distribuida

    verticalmente. Luego limita el borde derecho del texto informativo para que no sobre pase la mitad

    del layout. Debes reacomodar elRadioGroup para que limite horizontalmente con la lnea divisoria.

    En el segmento siguiente debes poner en la parte superior del padre el primer campo de texto, con

    ello toda la formula se orientar automticamente. Adicionalmente debes limitarlo en su borde

    izquierdo con la lnea divisoria y limitar el borde inferior del edit text con el borde superior del botn.

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    57/70

    Ese es el primer diseo que se me ocurri, no ests obligado a realizar lo mismo. Sera excelente que

    practicaras las orientaciones de distintas formas, esto te ayudar a comprender la ubicacin de los

    bordes y lmites delRelativeLayout .

    El cdigo de este layout sera el siguiente:

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    58/70

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    59/70

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    60/70

    android:onClick="onClickOperar"/>

    La aplicacin MegaKalc soportar el uso del idioma ingles en todas aquellas cadenas que lo

    requieran. Ya se haba estudiado que existen calificadores para determinar el lenguaje de cobertura

    en los recursos de la aplicacin, as que los emplearemos en la carpeta values.

    Para crear el nuevo recurso que se ajuste al idioma iremos a la previsualizacin del layout y

    seleccionaremos el icono del planeta, donde se desplegar la opcinAdd Translation... (Aadir

    traduccin):

    Al presionar esta opcin aparecer una ventana emergente con la lista de los idiomas que puedes

    elegir para la traduccin. Se eligeEnglish:

    En seguida se visualizar un asistente de traduccin que permite asignar la traduccin

    correspondiente a los strings existentes en el proyecto.

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    61/70

    Una vez aadida cada traduccin presionasOKy automticamente se crear la carpeta values-en

    para contener este recurso.

    El ltimo paso es aadir las acciones de clculo necesarias para que el resultado de la operacin sea

    exitosa.

    Lo primero que se debe realizar es declarar un nuevo mtodo onClick() personalizado para

    asignrselo al botn a travs de la pestaa de diseo en Android Studio.

    El algoritmo a implementar es sencillo:

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    62/70

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    63/70

    Lo primero es obtener los dos edit textscon el mtodofindViewById() .

    /*Obtener los campos de edicin*/numeroA =(EditText)findViewById(R.id.editNumeroX);

    numeroB =(EditText)findViewById(R.id.editNumeroY);

    Ahora debe obtenerse el contenido de cadaEditText con el mtodogetText() . No obstante este

    mtodo no devuelve propiamente la cadena si no un objeto especializado, pero el mtodo

    toString() de este objeto si devuelve el valor que necesitamos:

    /*Convertir el texto a enteros*/

    a =Integer.parseInt(numeroA.getText().toString());b =Integer.parseInt(numeroB.getText().toString());

    Es obvio que las operaciones no las podemos hacer con dos strings, en consecuencia debemos

    parsear cada una con el mtodo de claseparseInt() de la claseInteger .

    Luego se obtiene el identificador del radio seleccionado actualmente con el

    mtodogetCheckedRadioButtonId() . Debido a que son 4 radios, es ideal usar una sentencia

    switch para comparar el id obtenido con cada caso:

    switch(contenedorRadios.getCheckedRadioButtonId()){caseR.id.radioSuma:

    resultado =a+b;break;

    caseR.id.radioResta:resultado =a-b;break;

    caseR.id.radioMultiplicacion:resultado =a*b;break;

    caseR.id.radioDivision:resultado =a/b;break;

    }

    Finalmente operamos los dos nmeros dentro de cada case segn sea la opcin elegida por el

    usuario. El resultado final lo asignamos al TextView llamado textoResultado a travs de su

    mtodosetText() .

    /*Asignar el resultado

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    64/70

    */((TextView)findViewById(R.id.textoResultado))

    .setText(String.valueOf(resultado));

    El siguiente paso es cambiar el operador dependiendo de la seleccin del radiogroup. No

    inventaremos nada raro, ya que existe una interfaz llamada

    OnCheckedChangeListener

    para lagestin del cambio de seleccin dentro del grupo. Solo es implementar el mtodo

    onCheckedChanged() de la interfaz para cambiar la cadena del text view que representa el

    operador:

    contenedorRadios.setOnCheckedChangeListener(newRadioGroup.OnCheckedChangeListener(){

    @OverridepublicvoidonCheckedChanged(RadioGroupgroup,intcheckedId){

    TextViewoperador =(TextView)findViewById(R.id.textoOperador);

    switch(contenedorRadios.getCheckedRadioButtonId()){caseR.id.radioSuma:operador.setText("+");break;

    caseR.id.radioResta:operador.setText("-");break;

    caseR.id.radioMultiplicacion:operador.setText("*");break;

    caseR.id.radioDivision:operador.setText("/");break;

    }

    }});

    El cdigo final de MainActivity.java es el siguiente:

    packageTUPAQUETE;

    importandroid.support.v7.app.ActionBarActivity;importandroid.os.Bundle;importandroid.view.View;importandroid.widget.EditText;importandroid.widget.RadioGroup;importandroid.widget.TextView;

    publicclassMainActivityextendsActionBarActivity{

    /*Variables globales*/

    RadioGroupcontenedorRadios;

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    65/70

    @OverrideprotectedvoidonCreate(BundlesavedInstanceState){

    super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);

    contenedorRadios =(RadioGroup)findViewById(R.id.radiosOperaciones);contenedorRadios.check(R.id.radioSuma);

    contenedorRadios.setOnCheckedChangeListener(newRadioGroup.OnCheckedChangeListener(){

    @OverridepublicvoidonCheckedChanged(RadioGroupgroup,intcheckedId){

    TextViewoperador =(TextView)findViewById(R.id.textoOperador);

    switch(contenedorRadios.getCheckedRadioButtonId()){caseR.id.radioSuma:

    operador.setText("+");break;

    caseR.id.radioResta:

    operador.setText("-");break;caseR.id.radioMultiplicacion:

    operador.setText("*");break;

    caseR.id.radioDivision:operador.setText("/");break;

    }}

    });}

    publicvoidonClickOperar (Viewv){

    /*Variables locales*/

    EditTextnumeroA,numeroB;inta,b,resultado =0;

    /*Obtener los campos de edicin*/

    numeroA =(EditText)findViewById(R.id.editNumeroX);numeroB =(EditText)findViewById(R.id.editNumeroY);

    /*Convertir el texto a enteros*/

    a =Integer.parseInt(numeroA.getText().toString());b =Integer.parseInt(numeroB.getText().toString());

    switch(contenedorRadios.getCheckedRadioButtonId()){caseR.id.radioSuma:

    resultado =a+b;break;

    caseR.id.radioResta:

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    66/70

    resultado =a-b;break;

    caseR.id.radioMultiplicacion:resultado =a*b;break;

    caseR.id.radioDivision:resultado =a/b;

    break;}/*Asignar el resultado*/

    ((TextView)findViewById(R.id.textoResultado)).setText(String.valueOf(resultado));

    }

    }

    Habamos dicho que nuestras actividades heredaran de la clase Activity su

    comportamiento, pero el cdigo anterior muestra que se usa la clase ActionBarActivity

    de la librera android.support.v7.app.ActionBarActivity . Esta librera ha sido

    creada en el API de Android para que las versiones anteriores a la 5.0 conserven la Action Bar

    y soporten algunas caractersticas del nuevo tema Material.

    Finalmente ejecuta la aplicacin y visualiza los resultados en tu emulador:

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    67/70

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    68/70

    Se ha explicado las nociones bsicas del desarrollo Android para aquellos que les interesa liberar

    sus creaciones ante la comunidad. Se estudi el uso de las actividades como principal bloque de

    construccin de una aplicacin Android y como los recursos calificados posibilitan mltiplesvariaciones de una misma aplicacin ante varios dispositivos mviles.

    Aunque vimos pocas caractersticas de Android Studio, es obvio que apalancarse con este poderoso

    IDE deJetBrainses una de las mejores elecciones para potenciar el desarrollo de tus aplicaciones.

    En lo personal recomendara a todos los principiantes que aprendan al menos un 60% de las

    funciones de este entorno, ya que les ahorrara gran cantidad de tiempo y esfuerzo.

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    69/70

    James Revelo es blogger, desarrollador de software independiente y fundador de Hermosa

    Programacin. Actualmente invierte la mayora de su tiempo capacitndose en desarrollo de

    aplicaciones mviles con el fin de proporcionar contenidos y recursos de alta calidad a la comunidad

    web.

  • 7/26/2019 eBook Programacion Android Espaol (Good)

    70/70

    Hermosa Programacines un espacio dedicado a todos los desarrolladores de software que buscan

    artculos, guas, tutoriales y recursos sobre programacin de forma autodidacta. Se caracteriza por

    el uso de una metodologa detallada y dinmica, que aporte soluciones a los problemas cotidianosde los desarrolladores ms exigentes.

    Cada uno de los contenidos liberados es escrupulosamente planeado, diseado, redactado e

    implementado para que los usuarios obtengan el mayor beneficio. Donde encontrarn contenidos

    sobre Desarrollo Mvil en la Plataforma Android.