You are on page 1of 12

donde podemos ver tres elementos: TextView (objeto para mostrar texto), EditText (caja de entrada de texto) y Button

(botn). Empezaremos creando en Eclipse un proyecto para Android, modificaremos el archivores/layout/main.xml en su vista de cdigo de fuente y pegaremos el siguiente cdigo XML:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:id="@+id/label_a" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Operando A:"/> <EditText android:id="@+id/op_a" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@android:drawable/editbox_background" android:layout_below="@id/label_a"/> <TextView android:id="@+id/label_b" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@id/op_a" android:text="Operando B:"/> <EditText android:id="@+id/op_b" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@android:drawable/editbox_background" android:layout_below="@id/label_b"/> <Button android:id="@+id/sumar" android:layout_width="wrap_content" android:layout_height="wrap_content"

android:layout_below="@id/op_b" android:layout_alignParentLeft="true" android:layout_marginLeft="1dip" android:onClick="cSumar" android:text="+" /> <Button android:id="@+id/restar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/sumar" android:layout_alignTop="@id/sumar" android:onClick="cRestar" android:text="-" /> <Button android:id="@+id/multiplicar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/restar" android:layout_alignTop="@id/restar" android:onClick="cMultiplicar" android:text="*" /> <Button android:id="@+id/dividir" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/multiplicar" android:layout_alignTop="@id/sumar" android:onClick="cDividir" android:text="/" /> <TextView android:id="@+id/texto_resultado" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@id/dividir" android:text="Resultado:"/> <TextView android:id="@+id/resultado" android:layout_width="fill_parent" android:layout_height="wrap_content"

android:layout_below="@id/texto_resultado" android:text="Realice operacin para obtener resultado"/> </RelativeLayout>

Los atributos relevantes para este ejemplo de cada elemento son:


android:id identificador de cada objeto android:layout_width y android:layout_height, anchura y altura respectivamente android:layout_below: indica si el objeto est debajo de otro android:layout_toRightOf y android:layout_alignTop: indican si estn varios elementos en la misma fila sobre qu objeto se coloca a su derecha y su posicionamiento en altura

android:text es el texto por defecto en cada elemento android:onClick es el nombre del mtodo pblico a ejecutar al pulsar ese botn. Este mtodo debe ser obligatoriamente pblico y tener como parmetro de entrada la vista, ejemplo public void function cSumar(View view) { ... }.

ahora vamos a programar el funcionamiento de los objetos descritos en el archivo de extensin java creado para el proyecto:
package com.android.calculadora; import android.app.Activity; import android.os.Bundle; import android.widget.*; import android.view.*; public class Calculadora extends Activity { // Instancias de objetos a usar private double valor_a, valor_b; private EditText op_a, op_b; private TextView resultado; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // Asignamos los objetos this.op_a = (EditText) findViewById(R.id.op_a);

this.op_b = (EditText) findViewById(R.id.op_b); this.resultado = (TextView) findViewById(R.id.resultado); } public void cSumar(View view) { if(this.op_a.getText().toString().length() > 0 && this.op_b.getText().toString().length() > 0) { this.valor_a = Double.parseDouble(this.op_a.getText().toString()); this.valor_b = Double.parseDouble(this.op_b.getText().toString()); this.resultado.setText(Double.toString((this.valor_a + this.valor_b))); } } public void cRestar(View view) { if(this.op_a.getText().toString().length() > 0 && this.op_b.getText().toString().length() > 0) { this.valor_a = Double.parseDouble(this.op_a.getText().toString()); this.valor_b = Double.parseDouble(this.op_b.getText().toString()); this.resultado.setText(Double.toString((this.valor_a this.valor_b))); } } public void cMultiplicar(View view) { if(this.op_a.getText().toString().length() > 0 && this.op_b.getText().toString().length() > 0) { this.valor_a = Double.parseDouble(this.op_a.getText().toString()); this.valor_b = Double.parseDouble(this.op_b.getText().toString()); this.resultado.setText(Double.toString((this.valor_a * this.valor_b))); } }

public void cDividir(View view) { if(this.op_a.getText().toString().length() > 0 && this.op_b.getText().toString().length() > 0) { this.valor_a = Double.parseDouble(this.op_a.getText().toString()); this.valor_b = Double.parseDouble(this.op_b.getText().toString()); if(this.valor_b != 0) { this.resultado.setText(Double.toString((this.valor_a / this.valor_b))); } else { this.resultado.setText("Infinito"); } } } }

El mtodo onCreate se ejecuta al crear la aplicacin y es donde asignamos los objetos declarados en el XML a objetos Java. Tras ello declaramos las funciones definidas en los atributos onClick de cada botn. Por ltimo nos quedara ejecutarlo y probar el funcionamiento.

Conclusiones
Como hemos dicho, este ejemplo de una calculadora es un ejemplo muy sencillo pero podemos ver que con un poco de cdigo y unas pequeas nociones sobre Android SDK podemos sacar muchsimo provecho de nuestros conocimientos sobre Java.

59 comentarios:
Otro otro al correo pavarotty_91@hotmail.com se les agradecera

comentario de Jaime David - 7 de marzo de 2011 - 16:28


Se ve bueno el ejemplo, lo estoy haciendo con eclipse pero en la linea 16 no se reconoce la clase R? public void onCreate(Bundle savedInstanceState) { 16 super.onCreate(savedInstanceState); 17 setContentView(R.layout.main);

comentario de Colombiano - 16 de mayo de 2011 - 22:20


perdon linea 17 la clase R

comentario de colombiano - 16 de mayo de 2011 - 22:21


Parece que no tienes correctamente configuradas las rutas a las libreras de desarrollo de Android dentro de Eclipse, ya que el objeto R pertenece a la base de las libreras Java: http://developer.android.com/reference/android/R.html Has seguido la documentacin para que Eclipse tenga configurado correctamente las rutas? Siguiendo el siguiente enlace para instalar el SDK de Android no deberas tener problemas: http://developer.android.com/sdk/installing.html

comentario de Imaginanet - 17 de mayo de 2011 - 09:02


buenisimo..!!! justo lo que estoy buscando... ya que soy principiante en la programacion en android, grax..!!

comentario de daniel-89 - 22 de mayo de 2011 - 00:21

hola. disculpa la molestia. por casualidad tienen algun codigo de un software con navegaciones con ventanas, combobox y otros tipos de controles? desde ya muchas gracias. mi mail es carlosnavas1986@gmail.com

comentario de carlos navas - 3 de julio de 2011 - 00:38

Me estoy iniciando en esto y me parece exelente no tendras una calculadora con mas funciones no se talvez cientifica, seria super, gracias por todo. rauli_20_5@hotmail.com

comentario de Ismael - 26 de julio de 2011 - 04:37


Respecto a los dos anteriores comentarios:

Hola Carlos, seguiremos ampliando esta seccin sobre Android con el tiempo, de momento puedes revisar la seccin de ejemplos de Android http://developer.android.com/resources/browser.html?tag=tutorial Respecto al comentario de Ismael, a partir de aqu puedes hacer uso de todas las funciones matemticas de Java, por ejemplo: http://download.oracle.com/javase/6/docs/api/java/lang/Math.html o si quieres algo ms complejo siempre se puede programar. Un saludo.

comentario de Imaginanet - 26 de julio de 2011 - 10:47


amigo esta muy bueno lo compile corrio y todo pero no me cambia el resultado undo los botones y nada que puede ser

comentario de alvaro - 17 de agosto de 2011 - 09:08


Me obliga a forzar cierre!, ni siquiera alcanza a mostrar los botones...

comentario de Fernando - 21 de octubre de 2011 - 19:03 comentario de alejo - 25 de octubre de 2011 - 22:41
Muy bueno, gracias.

Excelente!!! compila completamente, buen cdigo para empezar en andriod...

comentario de Angelx - 6 de noviembre de 2011 - 17:22

hola que tal, excelente tu post pero apenas estoy empezando y estgaria padre que dieras un how to desde un principio de abrir las ventanas y eso, por que me costo algo de trabajo y tengo un error en estas lineas del package de java de la 19 ala 23 te agradeseria tu ayuda.....felicidades

comentario de Jorge Cu - 10 de noviembre de 2011 - 02:44

Hola Jorge, creo que deberas empezar por leerte el tutorial oficial del hello world: http://developer.android.com/resources/tutorials/hello-world.html y despus http://developer.android.com/resources/tutorials/views/index.html Saludos

comentario de Imaginanet - 10 de noviembre de 2011 - 08:51


hola buen aporte pero me sale erro en R.id.op_a y R.id.op_b el error es en .id haver si me ayudas xq este error

comentario de merry - 23 de noviembre de 2011 - 00:53


alguien sabe como enlazar una pagina web usando android sobre eclipse?

comentario de kei - 30 de noviembre de 2011 - 06:01


y despues como se publica en android market??

comentario de alvaro - 29 de noviembre de 2011 - 18:41


Hola lvaro, puedes publicar tu aplicacin en Android Market segn las instrucciones del portal de desarrolladores de Android: http://developer.android.com/

comentario de Imaginanet - 30 de noviembre de 2011 - 13:13


hey fijate que quise agregarle a tu app raiz cuadrada y cubica usando la formula this.valor_c ^(1/2) y no me da resultado correcto.. ayuda

comentario de jose dueas - 4 de diciembre de 2011 - 04:19


Hola Jos, Para hacer uso de races cuadradas y exponenciales es mejor hacer uso de la funcin pow de la librera Math. Por ejemplo para hacer 2^3 sera: double resultado = Math.pow(2,3); En el caso de la raz cuadrada hay una limitacin para races cuadradas de 2 y 3 (no para radicales superiores) en el que debemos hacer uso de la funciones Math.sqrt() y Math.cbrt() respectivamente, donde previamente debers haber hecho import java.lang.Math Puedes encontrar ms informacin en http://developer.android.com/reference/java/lang/Math.html Saludos.

comentario de Imaginanet - 5 de diciembre de 2011 - 08:28


no jala tu aplicacion, marca error y esta como tu lo hiciste, me dice que la aplicacion se ha interrumpido

comentario de arturo zamora - 25 de diciembre de 2011 - 02:07

le cambio el nombre al id, del operando a y todo lo que esta abajo del primer textview, me lo sube, por que????

comentario de arturo - 25 de diciembre de 2011 - 01:00


Hola Arturo,nn Respecto a que la aplicacin se ha interrumpido, ejectala desde Eclipse y en la consola de debug te mostrar la interrupcin que se ha producido.nn Respecto a que se te mueve todo tras modificar el ID, ten en cuenta que el res/layout/main.xml sigue buscando a ese botn, por lo que debes cambiar el ID en los dos sitios.

comentario de Imaginanet - 3 de enero de 2012 - 07:59


hola me podras poner las fuentes de la aplicacin porfavor

comentario de RUlo - 21 de enero de 2012 - 21:22


no suma -.-....todo lo demas..Ok =D

comentario de leo - 9 de febrero de 2012 - 18:03


ola diskulpa me sale un error en R.id.op_a, R.id.op_b, R.id.resultado. podrias ayudarme gracias

comentario de Daniel - 18 de febrero de 2012 - 23:39


Genial es como programar en SWING

comentario de LeonardoCM87 - 29 de febrero de 2012 - 18:46


Para evitar el error de la R edita el el main.xml de tu proyecto en el workspace/tuproyecto/res/layout/mail.xml pones los valores indicados y listeilor. No debieras tener problemas Saludos !!

comentario de Carlos - 17 de marzo de 2012 - 04:31

Men... gracias, estaba buscando la forma de hacer una calcu... y tu idea me sirvio mucho... lo estaba pensando de la forma dificil :D GRACIAS LOCO, SIGUE CON ESTE TIPO DE APORTES!!!!

comentario de Paspi - 10 de abril de 2012 - 08:57

hola, buen aporte, tambien estaba viendo si alguien pudiera mandarme un ejemplo con textbox, combobox, navegacion entre pantallas, etc a mi correo mrrg89@hotmail.com gracias de antemano

comentario de Alberto - 20 de abril de 2012 - 08:43

oye por que me marca error en la linea 18 donde se asignan los objetos en estos parametros(R.id.op_a) (R.id.op_b) (R.id.resultado)

comentario de led - 7 de junio de 2012 - 05:28


Muy buen aporte pro me gustaria q me ayudes con el codigo fuente xq me sale un error ayuda xfavor......

comentario de Esteban - 18 de junio de 2012 - 04:43


Excelente aporte. Gracias.

comentario de Cesar - 16 de junio de 2012 - 21:32


Hola buenas tardes, podrias colocar el archivo manifiest.xml.. Ya que me da un error al ejecutarlo (Unable to open stack trace file '/data/anr/traces.txt': Permission denied).. Gracias

comentario de diana - 12 de julio de 2012 - 22:56

Hola Diana, parece un problema de permisos, podras darle permisos de escritura al archivo que comentas?

comentario de Imaginanet - Carlos - 13 de julio de 2012 - 07:54


funciona perfecto muchas gracias

comentario de David C - 16 de julio de 2012 - 17:53


Thank you very much !!!

comentario de Al - 24 de julio de 2012 - 18:44


muy bueno! tengo un par de dudas, todas las clases que se crean deben ser hijos de la clase Activity? y la otra, para pasar informacion de una clase a otra hay que usar los Intents, eso es siempre o cuando por ejemplo se desea crear otra Activity?

comentario de patricio - 2 de agosto de 2012 - 06:57


Hola imaginanet, Est buensimo este cdigo que dejaste, muchas gracias por eso. Estoy comenzando a programar para Android y me dejaron la tarea de realizar una calculadora; que deleite poder toparme con esto. Bendiciones.

comentario de Juan Pablo - 2 de agosto de 2012 - 06:20


Hola Patricio, s, as es.

comentario de Imaginanet - Carlos - 21 de agosto de 2012 - 12:01


Gracias por este post!

comentario de Yan C: - 13 de septiembre de 2012 - 06:42


Hola Muy Bueno, ahora tengo una duda, una vez creada y funcionando perfectamente, como la instalo en mi android, he buscado en la ruta Proyecto/bin y he encontrado Calculadora.apk , la he copiado en mi Android pero a la hora de ejecutarla no hace nada, te agradezco la ayuda

comentario de Sergio - 19 de septiembre de 2012 - 22:43


Hola Muy Bueno, ahora tengo una duda, una vez creada y funcionando perfectamente, como la instalo en mi android, he buscado en la ruta Proyecto/bin y he encontrado Calculadora.apk , la he copiado en mi Android pero a la hora de ejecutarla no hace nada, te agradezco la ayuda

comentario de Sergio - 20 de septiembre de 2012 - 19:44


Hola Sergio, en la siguiente URL puedes encontrar ms informacin de qu hacer con los APK: http://www.pedroventura.com/software/como-instalar-un-apk-en-android/ Saludos.

comentario de Imaginanet - Carlos - 20 de septiembre de 2012 - 08:28


Viejo esta buenisimo el ejemplo, pero tengo un inconveniente con el codigo me aparece el siguiente error: FATAL EXCEPTION MAIN nos e que sea la verdad por ejemplo en la linea 17 donde colocaste setContentView(R.layout.main); a mi me toco colocar setContentView(R.layout.activity_calculadora); me pdorias colaborar con eso? Muchisimas gracias

comentario de Juan David Ramirez - 3 de octubre de 2012 - 04:12

Juan David Ramirez a mi me suceda lo mismo, eso sucede cuando copias y pegas el cdigo completo, lo que tienes que hacer es parte del codigo en su lugar teniendo en cuenta los corchetes, el setContentView(R.layout.main); no lo tienes que cambiar. quedaria asi: package com.example.capitales; "en vez de capitales el nombre de tu proyecto, creeria que calculadora. import android.os.Bundle; import android.app.Activity; import android.view.Menu; public class Capitales extends Activity { private double valor_a, valor_b; private EditText op_a, op_b; private TextView resultado; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); this.op_a = (EditText) findViewById(R.id.op_a); this.op_b = (EditText) findViewById(R.id.op_b); this.resultado = (TextView) findViewById(R.id.resultado); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true; } public void cSumar(View view) { if(this.op_a.getText().toString().length() > 0 && this.op_b.getText().toString().length() > 0) { this.valor_a = Double.parseDouble(this.op_a.getText().toString()); this.valor_b = Double.parseDouble(this.op_b.getText().toString()); this.resultado.setText(Double.toString((this.valor_a + this.valor_b))); } } public void cRestar(View view) { if(this.op_a.getText().toString().length() > 0 && this.op_b.getText().toString().length() > 0) { this.valor_a = Double.parseDouble(this.op_a.getText().toString()); this.valor_b = Double.parseDouble(this.op_b.getText().toString()); this.resultado.setText(Double.toString((this.valor_a - this.valor_b))); } } public void cMultiplicar(View view) {

if(this.op_a.getText().toString().length() > 0 && this.op_b.getText().toString().length() > 0) { this.valor_a = Double.parseDouble(this.op_a.getText().toString()); this.valor_b = Double.parseDouble(this.op_b.getText().toString()); this.resultado.setText(Double.toString((this.valor_a * this.valor_b))); } } public void cDividir(View view) { if(this.op_a.getText().toString().length() > 0 && this.op_b.getText().toString().length() > 0) { this.valor_a = Double.parseDouble(this.op_a.getText().toString()); this.valor_b = Double.parseDouble(this.op_b.getText().toString()); if(this.valor_b != 0) { this.resultado.setText(Double.toString((this.valor_a / this.valor_b))); } else { this.resultado.setText("Infinito"); } }} }

comentario de ohm - 20 de octubre de 2012 - 21:46


Como instalo android en mi compu?? o donde descargo el id para programar en android y eclipse

comentario de Estefan Menocal - 23 de octubre de 2012 - 16:42


Hola Estefan, en el artculo se describe como realizarlo. Sigue los pasos.

comentario de Imaginanet - Carlos - 27 de octubre de 2012 - 17:13


Disculpa estaba probando tu codigo y mi computadora detiene la aplicacion... dice Unafortulately Calculadora has stopped... y no hace ni una operacion...

comentario de Rogelio - 24 de noviembre de 2012 - 02:54


Excelente!!!!

comentario de genaro - 27 de noviembre de 2012 - 23:20


Funciono muy bien gracias

comentario de Saya - 17 de diciembre de 2012 - 03:09


No funciona he revisado la ruta, compile un ejercicio de hola mundo y funciono. Pero me sale el error de .R Que podra ser...? Ya mire el xml, me voy a cortar las pelotas si no soy capaz de hacer este aplicativo.

comentario de Benjamin Jaramillo - 3 de enero de 2013 - 04:28

Hola! Muy buena, me ha servido para entender algunas cosillas de Android. Lo que no entiendo es porque tanto "this". Por no hace falta no?

comentario de Alvaro - 20 de enero de 2013 - 14:05


holis! :DD me funcion muy bien el ejemplo! opaqu a mi compaero ;)

comentario de Ubaldo - 13 de febrero de 2013 - 21:27

Hombre, sos lo mximo gracias por la ayuda.

comentario de Any - 2 de marzo de 2013 - 11:02


yo hasta aqui voy bien pero cual seria el codigo para agregar raiz y potencia

comentario de Watson - 16 de marzo de 2013 - 07:53

la linea "if(this.valor_b != 0)" <-- no tiene sentido porque nunca sera 0 ya que en la condicion anterior has dicho que sea mayor que cero.

comentario de paco - 10 de abril de 2013 - 19:54


oo grax. fue de gran ayuda !!

comentario de alma - 17 de abril de 2013 - 23:14


EXELENTE!!!! fue de gran utilidad ;) thanks