sábado, 17 de diciembre de 2011

Posteando desde un tablet

Aunque se hace más llevadero escribir con Swype sigue siendo arduo postear desde un tablet, aunque resulta especialmente emocionante pensar que por fin podré probar mis desarrollos Gingerbread  en un entorno real y no en el simple emulador. Intentaré seguir portándome bien para que los Reyes me traigan uno de los grandes y dar el salto a Honeycomb  pero, mientras tanto, a falta de pan buenas son tostadas. ¡Os deseo Feliz Navidad y buenos desarrollos!

miércoles, 23 de noviembre de 2011

Despedida y cierre


Con cada nuevo curso, y este será ya probablemente el último de 2011, compruebo de primera mano el mal que sufre este país. Todos estos chicos esconden talentos particulares que a nada que encontraran un lugar en el mercado laboral para desarrollarse y potenciarse podrían conformar el caldo de cultivo de una nueva fuerza generadora de trabajo e ideas. Es duro resignarse a pensar que todos, y me incluyo, tengamos que temer o al menos guardarle un gran respeto al futuro y no descartar que tengamos que mendigar empleos en los que toda esa capacidad se verá seguramente infravalorada. Pero no voy a despedir el curso lanzándome en brazos del pesimismo. Me liberaré del corsé de los temores para ahuyentar el mal agüero e invocar la buena suerte que os deseo para la experiencia vital que queda por delante. Pero, ante todo, que no perdáis la sencillez, la capacidad de trabajo y el espíritu de superación que habéis demostrado. Con eso debería ser suficiente para triunfar. Gracias por vuestra presencia y por hacerme un poco más sabio con ella. ¡Chin, chin!

Salva

martes, 4 de octubre de 2011

Prácticas Android: ejecutando aplicaciones apk desde otras aplicaciones Android


En un post anterior vimos un ejemplo de cómo comunicar dos aplicaciones Android independientes pero, claro está, eso suponía que la aplicación invocada debía estar instalada antes de la llamada, de lo contrario, lo único que podíamos hacer era mostrar un mensaje avisando de la ausencia de la misma. En este ejemplo damos un paso más allá: ejecutar automáticamente el archivo de instalación de la aplicación externa requerida si ésta no está presente en el sistema. La actividad principal consiste en un cuadro de texto donde se escribirá la ruta de un archivo y un botón para activar el explorador de archivos OI File Manager que permita seleccionarlo de forma visual sin necesidad de escribir la ruta a mano. Si el explorador está instalado se despliega normalmente; si no, se ejecuta el archivo de instalación.

Para que esto sea posible se copia el archivo de instalación del OI File Manager en la subcarpeta /res/raw del árbol del proyecto. Esto supone la integración total de dicho archivo con el resto del proyecto. Cuando se envía un intent al explorador y éste no responde, se hace una copia temporal del archivo apk de /res/raw a la tarjeta SD (véase el método boolean guardarRawComo(String nombreFichero)). Una vez desplegado el apk en la SD ya podemos proceder a su ejecución con el envío de un nuevo intent con una acción de tipo ACTION_VIEW que activará la actividad de instalación. Al terminar y devolver el control a la actividad principal, se elimina el archivo temporal de la SD. Es importante contar el permiso de instalación de paquetes "android.permission.INSTALL_PACKAGES" declarado en el descriptor AndroidManifest.xml.

Puedes descargar el proyecto NetBeans aquí.



domingo, 2 de octubre de 2011

Practicas Android: capturando información de las llamadas entrantes


Para capturar información de las llamadas telefónicas necesitamos una clase especial de tipo BroadcastReceiver. Dentro de esta clase creamos un objeto de la clase TelephonyManager y lo registramos como servicio del sistema. Por otro lado, tenemos otra clase que deriva de PhoneStateListener que implementa el método onCallStateChanged() para detectar las llamadas entrantes. El método onReceive() de la clase BroadcastReceiver recoge el número del llamante del objeto Intent usando las siguientes líneas de código para consultar el valor de la clave incoming_number:

Bundle bundle = intent.getExtras();
String phone_number = bundle.getString("incoming_number");

Puedes descargar el proyecto Netbeans de ejemplo aquí. Ten en cuenta que esta aplicación no dispone de interfaz gráfica. Tendrás que abrir el log del terminal donde ejecutes la aplicación y a continuación abrir un segundo terminal desde el que realizar la llamada. La salida del programa se producirá en el log, tal y como indica la figura. Detectará el teléfono del llamante y cuando descuelgues registrará esta situación.

jueves, 29 de septiembre de 2011

Prácticas Android: arrastrar para desplazarse entre distintas pantallas


En esta pequeña aplicación de demostración podrás ver el uso del componente ViewFlipper que te permitirá deslizarte entre distintas pantallas. Concretamente, dispones de tres imágenes con sus respectivos títulos y podrás pasarlas arrastrando el dedo (ratón en el simulador) sobre la pantalla a la derecha o a la izquierda, o bien utilizando los botones de la parte superior. Puedes descargar el proyecto NetBeans aquí.

Prácticas Android: integrando un explorador de archivos en nuestras aplicaciones





A la hora de cargar archivos, seleccionar carpetas o indicar el destino de los ficheros que guarde nuestra aplicación resulta muy práctico contar con un gestor de archivos visual que nos permita realizar estas tareas a golpe de pulsación, sin tener que teclear largas cadenas de texto. Uno de estos gestores de libre distribución que, además, podemos integrar en nuestras aplicaciones es OI File Manager (véase http://www.openintents.org/en/node/159) Para ello, primero hay que instalar el gestor de archivos. Puedes descargar el archivo apk desde la web antes indicada o cogerlo dentro de la carpeta del proyecto de esta práctica. Para instalarlo en el emulador recuerda que debes situarte en la linea de comandos en la carpeta de herramientas de la plataforma (normalmente, c:\Archivos de Programa\Android\android-sdk\platform-tools). Después teclea :

adb install [ruta del apk]\FileManager-1.1.6.apk

donde [ruta del apk] se refiere a la carpeta donde has guardado el archivo de instalación dentro de tu equipo. Si no se producen errores durante la instalación en el menú de apps debe aparecerte un icono como el seleccionado en la figura:


Una vez instalado el gestor y aceptada la licencia de distribución, ya puedes ejecutar este proyecto de NetBeans de prueba. No es más que una app sin funcionalidad que lo único que pretende es mostrar cómo se produce la interacción con el gestor desde una actividad cualquiera. Consta de un cuadro de texto, donde se escribirá la ruta de la carpeta o archivo una vez haya sido seleccionada, y cuatro botones que te permitirán abrir el gestor para lectura/escritura de archivos y selección de carpetas. No obstante, insistimos, los botones no harán ninguna de estas tareas, simplemente escribirán la ruta de la carpeta o archivo seleccionado en el cuadro de texto. Queda como tarea opcional del alumno completar la funcionalidad de los botones o adaptar el proyecto a aplicaciones específicas.


miércoles, 28 de septiembre de 2011

Java. Splash-Screen de arranque de programa con transparencias.

Descargar el código y el ejecutable jar aquí


En este proyecto NetBeans dispones del código necesario para crear en Java una splash-screen de arranque de aplicación utilizando una imagen PNG con transparencia, al modo de los programas de Adobe, como Photoshop o Illustrator. El proceso consiste, grosso modo, en superponer en un buffer de memoria la imagen PNG que queremos mostrar sobre la captura de pantalla de la zona rectangular actual donde finalmente se desplagará, dando la sensación de superposición real. No obstante, este planteamiento tiene una limitación, a saber, que si movemos alguna ventana o elemento bajo la imagen PNG mientras arranca la aplicación se pondrá en evidencia el "truco" visual al aparecer el recorte rectangular desencajado con respecto al fondo original. No obstante, es una situación poco probable debido a que la aparición de la splash screen sólo suele durar unos pocos segundos, antes de que desaparezca definitivamente para dar paso a la ventana principal de la aplicación, tiempo en el que el usuario suele quedar a la espera sin realizar otras tareas.


martes, 27 de septiembre de 2011

Prácticas Android: enviando y recibiendo mensajes SMS


  • Descarga el proyecto NetBeans de ejemplo aquí
  • Para poder probar la aplicación deberás instalarla en dos terminales distintos, uno para enviar y otro para recibir. Como número de teléfono de cada terminal podrás usar el número de puerto en el que corre el emulador. Podrás verlo en la barra de título de la ventana del emulador.

AndEngine: una librería libre para desarrollar juegos Android


Prácticas Android: enviando un email a una lista de destinatarios

Para poder enviar emails primero debemos configurar alguna aplicación de correo a la que enviar nuestra petición. Para hacer pruebas con el emulador lo más sencillo es configurar la app "Email" con una cuenta de Gmail. Para ello, accedemos a ella desde el menú principal:


Se nos pedirá que introduzcamos el identificador de la cuenta y nuestra contraseña:



Pulsamos el botón Next para avanzar. El proceso de verificación de la cuenta puede tardar algún tiempo:


A continuación podemos darle opcionalmente un nombre a nuestra configuración de cuenta y proporcionar un nombre de usuario que aparecerá en los mensajes salientes:



Después de pulsar el botón Done y si todo ha ido bien, el proceso termina mostrándonos una lista con los correos de nuestra bandeja de entrada:


Una vez configurado el correo, crea una app Android en NetBeans añadiendo el siguiente código al método onCreate().

String listaDestinatarios[] = {"correo1@hotmail.es", "correo2@gmail.com"};

Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("plain/text");
intent.putExtra(Intent.EXTRA_EMAIL, listaDestinatarios);
intent.putExtra(Intent.EXTRA_SUBJECT, "Asunto");
intent.putExtra(Intent.EXTRA_TEXT, "Contenido");
startActivity(Intent.createChooser(intent, "Email"));

Al arrancar la aplicación ésta invocará a "Email" pasándole la lista de correos a los que va destinado el correo, con el asunto del mismo y el contenido. Después el usuario tendrá que pulsar el botón "Send" para confirmar el envío. Antes podrá llevar a cabo las ediciones que considere oportunas.

jueves, 22 de septiembre de 2011

Prácticas Android: trabajando con bases de datos SQLite


Descarga el proyecto NetBeans de la base de datos de trabajadores aquí


Intenta subsanar los siguientes errores:

  • La aplicación permite agregar un empleado sin nombre, especificando sólo la edad.
  • El programa lanza un críptico mensaje de error cuando se introduce texto en el cuadro de la edad y se intenta insertar el empleado.
  • Cuando eliminamos un empleado y volvemos a la pestaña para añadir nuevos empleados, no se actualiza el contador de empleados totales registrados en la base de datos.
  • Tras ingresar un nuevo empleado, los cuadros de texto con la información del mismo no se limpian.
  • No se impide la introducción de registros duplicados.

Otras tareas propuestas:

  • Ya que los departamentos a los que pueden pertenecer los empleados se introducen desde el código, estos son fijos, no hay posibilidad de cambio. Habilita un cuadro de texto para poder añadir nuevos departamentos.
  • Crea una nueva tabla donde vayan a parar los empleados que se hayan eliminado, a manera de archivo histórico y habilita algún componente que permita ver el contenido de dicho histórico.

miércoles, 21 de septiembre de 2011

Prácticas Android: servicios y reproducción de sonido


Un servicio es una aplicación que corre de forma automática, sin interacción directa con el usuario (aunque pueden ser interactuados por mediación de una actividad, como en este ejemplo). Desarrollan tareas importantes, para el resto de las aplicaciones o para el sistema, ejecutándose en segundo plano. Tienen un ciclo de vida diferente a las actividades, por lo que los métodos que hay que sobrecargar también son diferentes. En este proyecto NetBeans de ejemplo dispones de una interfaz gráfica con dos botones para iniciar y detener un servicio que permite reproducir música de fondo. Además, aparecerán advertencias indicándote por qué fase del ciclo de vida del servicio se está pasando en cada momento. Trata de contestar a los siguientes puntos:

  • ¿Cuál es la clase base de la que han de derivar todos los servicios?
  • ¿Cuál es la clase que permite la reproducción de sonidos?
  • ¿Para qué sirve el método onBind() del servicio? ¿Por qué aquí devuelve null en todo caso?
  • ¿Se ha de especificar el servicio de alguna manera en el AndroidManifest.xml?
  • ¿Qué se invoca antes, a onCreate() o a onStart()?
  • ¿Qué clase de objetos permiten comunicar la actividad con el servicio para controlarlo a través de los botones?

Prácticas Android: ejemplo de cronómetro



Descarga el proyecto NetBeans aquí.

martes, 20 de septiembre de 2011

Prácticas Android: cambiando la altura de los tabs

Descarga el siguiente proyecto de NetBeans y modifica las líneas de código que se te indican para pasar de una altura de los tabs de 65 puntos (derecha) a 40 puntos (izquierda):

  • En main.xml localiza la etiqueta

    y cambia android:layout_height="65px" por android:layout_height="40px"

  • En MainActivity.java localiza las instrucciones tipo

    tabs.getTabWidget().getChildAt(<índice>).getLayoutParams().height = 65;

    y sustitúyelas por

    tabs.getTabWidget().getChildAt(<índice>).getLayoutParams().height = 40;

Prácticas Android: experimentando con secuencias animadas de imágenes


Descarga el siguiente proyecto de NetBeans que muestra un caballo en movimiento mediante el pase en sequencia de 8 fotogramas. Trata de contestar a las siguientes cuestiones:
  • ¿Qué clase es imprescindible para poder animar una sequencia de imágenes? ¿En qué paquete se encuentra?
  • ¿Cómo podrías variar la velocidad de la animación?
  • ¿Qué habría que hacer para incluir algún fotograma más?

lunes, 19 de septiembre de 2011

Java 2D

[Hacer clic en la portada del tutorial para descargarlo]

Java2D es una de las APIs (Application Program Interface) más ricas que proporciona la edición estándar de Java (J2SE). El presente texto aborda las tres áreas principales que integran Java2D: figuras geométricas, imágenes y dibujo de texto. Asimismo se introducen en profundidad los conceptos generales que pueden aplicarse a todos ellos, como pueden ser el tratamiento del color y de la transparencia, la gestión de transformaciones geométricas o la manipulación de ficheros JPEG.

A medida que se van introduciendo nuevas clases de la API, éstas se van hilvanando entre sí para proporcionar al programador un mayor control sobre el aspecto de los lienzos que quiera dibujar. De esta forma se estudia, entre otras muchas cosas, el dibujo de figuras sobre fotografías digitales, la sobreimpresión de texto sobre imágenes e incluso la utilización del contorno de un texto en negrita como elemento a través del que ver una imagen de fondo.

Cada uno de los conceptos necesarios se introduce desde cero, aunque se suponen conocimientos del lenguaje Java, y se proporcionan numerosos ejemplos completos que pueden ser puestos en práctica sin más modificación que la de elegir la foto preferida que se desea transformar, o modificar la cadena de texto a visualizar. Cada ejemplo se acompaña de una adecuada explicación sobre las líneas de código vitales que producen el efecto que se desea conseguir en cada caso, por lo que al lector le resultará muy cómodo realizar modificaciones personalizadas y obtener sus propios resultados. La inclusión de las imágenes que resultan de cada uno de los ejemplos comentados también ayuda enormemente a la comprensión del código y facilita la asimilación de conceptos.

jueves, 15 de septiembre de 2011

Prácticas Android: Cambiar/Restaurar el fondo de pantalla.


Descarga el siguiente proyecto de NetBeans que permite alternar el fondo de pantalla entre la imagen original y la fotografía de un tigre. Explora el código y trata de resolver estas cuestiones:
  • Cambiar el fondo de pantalla supone disponer de algún permiso especial. ¿Cómo se llama dicho permiso? ¿En qué archivo ha de ser especificado?
  • Intenta sustituir la imagen del tigre por otra imagen personalizada.
  • ¿Serías capaz de crear una lista de imágenes para poder elegir entre varias?

martes, 13 de septiembre de 2011

Android: ejemplo de Cajón Deslizante (SlidingDrawer)



  • Archivo /res/layout/main.xml:

<?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"

/>

<SlidingDrawer

android:id="@+id/drawer"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:orientation="vertical"

android:handle="@+id/handle"

android:content="@+id/content">

<ImageView

android:id="@id/handle"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:src="@drawable/icon"/>

<LinearLayout

android:id="@id/content"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical">

<Button

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:text="Ejemplo de Sliding Drawer"/>

</LinearLayout>



</SlidingDrawer>

</LinearLayout>


  • Archivo /res/values/strings.xml:


<?xml version="1.0" encoding="utf-8"?>

<resources>

<string name="app_name">Demo Cajón Deslizante</string>

<string name="hello">Hola a todos</string>

</resources>

Prácticas Android: Campos de texto con función de autocompletado dinámica




Descarga el siguiente proyecto de NetBeans e indaga sobre la implementación de este campo de texto dinámico para introducir nombres de países. A medida que se escribe irán apareciendo nombres cuya parte inicial coincida con los caracteres introducidos. Si no se selecciona ningún país de la lista desplegable y se introduce uno nuevo, al hacer clic en el botón "Agregar País", dicho país se añadirá a la lista ya existente de manera que también podrá formar parte de despliegues posteriores. Esto es, el programa tiene una lista estática inicial formada por los países "Argentina", "Albania", "Alemania", "Argelia", "Israel", "Bolivia", "México", "Brasil", "Holanda", "Italia", "España", "Etiopía" pero podrás aumentarla con los países que vayas introduciendo en tiempo de ejecución.

Trata de hallar respuesta a las siguientes cuestiones:
  • El TextView auxiliar con id "txt_texto" está declarado convenientemente pero su atributo de visibilidad ha sido marcado como "gone" y no se despliega en pantalla. ¿Qué diferencia aprecias al cambiar "gone" por "invisible"? ¿Son lo mismo? Estudia el comportamiento de la aplicación también cuando se marca como "visible"
  • ¿Cómo se consigue que no se almacene el mismo país más de una vez? Si los textos introducidos son exactamente iguales no aparecerán repetidos en la lista desplegable; pero si hay diferencias entre mayúsculas y minúsculas sí se repiten... ¿Se te ocurre alguna manera de evitar esta situación?
  • Cambia el valor de la propiedad android:completionThreshold para descubrir cuál es su cometido.

Prácticas Android: explorando los ficheros de texto

Ejemplo de escritura de archivo de texto:


En este ejemplo Environment.getExternalStorageDirectory() devolverá la ruta de la tarjeta SD. Así que has de emplear en el emulador un terminal que le dé soporte. La configuración mostrada permite añadir datos al fichero sin machacarlo. Si lo que quieres es sobreescribirlo cada vez, pon la bandera "sobreescribir" a true. Aquí, concretamente, estamos almacenando en el fichero "historial.txt" los campos de texto "txtEuros" y "txtDescripcion" con un salto de línea a continuación.

Ejemplo de lectura de fichero de texto:

En este ejemplo, "nombre" representa el nombre del fichero de texto que queremos leer. Por otra parte, "txtListado" es un TextView donde se muestran todas la líneas de dicho fichero. El método Log.e() nos permite escribir trazas de errores en el log del sistema Android. Para visualizar dicho log debes ejecutar la instrucción "adb logcat" en la línea de comandos. Recuerda que la aplicación "adb" está por defecto en la subcarpeta platform-tools del SDK. Para salir del log simplemente pulsa la combinación CTRL+C. Si lo que deseas es limpiar completamente el log ejecuta "adb logcat -c"


A partir de estos dos ejemplos crea una sencilla aplicación que permita ir añadiendo a un fichero de texto la temperatura en grados centígrados de una serie de ciudades. Habilita un botón para visualizar el listado completo de pares Ciudad - Temperatura que se han introducido hasta el momento.

Prácticas Android: crear aplicaciones con más de una pantalla




Sigue el siguiente ejemplo para construir una sencilla aplicación que en la pantalla de arranque nos pida el nombre y al pulsar el botón etiquitado como "Hola" nos lleve a otra pantalla diferente donde se salude al usuario empleando el nombre que ha introducido. Presta especial atención a los aspectos clave como:
  • La creación de una clase por cada pantalla extendiendo siempre la clase Activity
  • Los archivos descriptivos de las distintas interfaces en la subcarpeta /res/layout. ¿Cómo asocia el compilador cada archivo XML con la subclase de Activity (pantalla) que le corresponde?
  • La inclusión de las actividades en el descriptor AndroidManifest.xml
  • La comunicación entre pantallas mediante objetos Intent y el paso de pares (clave, valor) mediante Bundle.

jueves, 8 de septiembre de 2011

miércoles, 7 de septiembre de 2011

Prácticas Android: experimentando con Google Maps




Descarga este proyecto de NetBeans 7.0.1 en el que encontrarás una aplicación básica para el uso de Google Maps sobre Android. Para que funcione deberás contar con un terminal virtual con la siguiente configuración:

Asimismo, para poder usar la API de Google Maps es necesaria una clave personalizada que se incluirá en la propiedad "android:apiKey" de la etiqueta correspondiente al MapView en el archivo main.xml dentro de la ruta /res/layout. Sigue el siguiente tutorial o este, centrándote en las instrucciones correspondientes a Windows, para generar dicha clave.

Una vez cubiertos estos pormenores podrás ejecutar la aplicación desde el IDE de NetBeans. Simplemente, carga a pantalla completa un mapa donde se marca la ubicación del centro donde estamos impartiendo el curso, tal y como se muestra en la primera viñeta.

No obstante, hay comentadas algunas líneas de código que ilustran otras características adicionales de los mapas. Por ejemplo, en el método sobrecargado onCreate() de la clase AndroidMapas hay una línea comentada para activar la vista de satélite. Quita el comentario y vuelve a ejecutar el proyecto para comprobar que efectivamente funciona. En ese mismo método, al final, hay una llamada comentada al método privado buscarUbicacion() que es capaz de mostrarnos el mapa de alguna ubicación dando una descripción textual de la misma. Esto es, la función contraria a la primera: en vez de buscar un punto a partir de sus coordenadas, buscamos una coordenada a partir de la descripción del punto.

Si quieres una explicación más detallada de la funcionalidad de las distintas líneas de código lee atentamente estos tres artículos relacionados:


Prueba a cambiar las coordenadas de Anexo 4 por las de otro lugar. Para averiguar las coordenadas de algún punto terrestre, búscalo en Google Maps como lo harías normalmente, indicando alguna cadena descriptiva; por ejemplo, "París, Francia". A continuación centra el mapa en ese punto (botón derecho sobre el punto > Centrar el mapa aquí). Luego escribe el siguiente código en la barra de direcciones del navegador:

javascript:void(prompt('',gApplication.getMap().getCenter()));

Pulsa intro y te aparecerá una ventana con el par de valores (latitud, longitud). Es preferible que todo este proceso lo hagas en Internet Explorer; puede que no funcione adecuadamente en otros exploradores.

Una vez que dispongas de las coordenadas localiza el lugar del código donde se emplean así como dónde se le da nombre al punto referenciado para cambiar el texto de la etiqueta.

Prueba, también a hacer búsquedas descriptivas con distintas cadenas de texto. Lo ideal sería que ampliaras la interfaz mediante un cuadro de texto que me permitiese introducir la cadena de búsqueda y un botón para activarla.

¿Sabrías decir en qué parte del código se elimina la barra de título y los iconos de batería y cobertura para aprovechar todo el espacio de la pantalla para el mapa?

¿Serías capaz de cambiar el marcador típico de Google Maps por el icono de una chincheta o el logotipo de Android?

Averigua cómo cambiar el círculo azul del marcador por un cuadrado rojo.

Viñeta. Mundo inalámbrico


Frankly, me muero de miedo sólo de pensar en la posibilidad de un futuro completamente sin hilos.


martes, 6 de septiembre de 2011

Ejercicio. Desarrollar una aplicación Android básica.

A partir del ejemplo desarrollado en clase, empleando NetBeans y DroidDraw, crea una aplicación Android que calcule el índice de masa corporal. La aplicación solicitará la edad, el peso en kilogramos y la altura en centímetros para efectuar dicho cálculo realizando las siguientes validaciones (opcional):
  • La edad debe ser superior o igual a 18 años, pues se considera que el cálculo no es suficientemente preciso aplicado a menores de edad.
  • La altura debe ser superior o igual a 150 cms, pues el cálculo se desvirtúa para personas que padezcan algún tipo de problema de crecimiento.
  • El peso no puede ser negativo o cero.
  • Todos los campos son obligatorios.

El resultado que debe mostrarse en la salida, en función del índice calculado, será:

  • Por debajo de los 20 Kg/m2: "Anorexia nerviosa"
  • Entre 20 y 25: "Peso ideal"
  • Entre 25 y 30: "Sobrepeso o exceso de peso"
  • Entre 30 y 35: "Obesidad leve"
  • Entre 35 y 40: "Obesidad moderada"
  • Por encima de 40: "Obesidad mórbida"

Para calcular el IMC emplea la siguiente fórmula:

lunes, 5 de septiembre de 2011

Diseñador automático de aplicaciones Android



Herramienta para diseñar interfaces Android de forma visual




Haz clic aquí para descargarlo


Archivos principales de un proyecto Android en NetBeans

Cuando creamos un nuevo proyecto de Android nos genera siempre una estructura de archivos como esta:



MainActivity.java: es la actividad principal de nuestra aplicación; en otras palabras, es la clase que se inicia al ejecutarse nuestra app. Justo cuando acabamos de crear nuestro proyecto la clase sólo contiene esto:


R.java: esta clase sirve para encontrar los recursos de datos que se generen en la aplicación. Esta clase nunca debe modificarse manualmente ya que se genera automáticamente cada vez que compilamos o en el momento que ingresamos un nuevo recurso en algún archivo; inicialmente contiene esto:



main.xml: este archivo nos sirve para declarar o posicionar los objetos como botones, vistas, textos, inputs etc. Se basa en tags o etiquetas al estilo de HTML; inicialmente sólo tiene un objeto "TextView" con la leyenda "Hello Android from NetBeans". Básicamente este archivo es el que muestra todo lo que vemos en pantalla. Se pueden tener varios archivos de este tipo en la carpeta layout si se quiere tener más de una vista diferente.


Strings.xml: este archivo se utiliza para crear recursos estáticos de variables u otras cosas, como por ejemplo el nombre de la app o valores iniciales para algún input, en este caso solo tengo una string con el nombre de mi app.


AndroidManifest.xml: el archivo donde se indica qué actividad será la principal, cuales serán los intents, el nombre de versión, el nombre de aplicación y el icono que usará su aplicación, entre otros aspectos descriptivos de la aplicación.


Estos serían, grosso modo, los archivos principales de un proyecto en Android.

Infografía sobre la evolución de Android

Operaciones con el emulador de Android desde la línea de comandos

[Haz clic en la imagen para acceder al artículo]