La calculadora con Android

|filename|/images/android/androidCalc.png

Donde buscar documentación

Utilizo el tutorial oficial de Android para empezar a programar.

http://developer.android.com/training/basics/firstapp/index.html

Diseño de las pantallas

Para empezar hay que modificar el Layout para añadir, dos cajas de texto, un botón y una etiqueta.

|filename|/images/android/layoutEdit.png

Edito el fichero layout -> activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical"
  tools:context=".MainActivity">

  <EditText
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:id="@+id/operator1"
          android:text=""
          />

  <EditText
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:id="@+id/operator2"
          android:text=""
          />

  <Button

          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="@string/btnAdd"
          android:id="@+id/btnAdd"
          android:onClick="sendAdd"
          />

  <TextView
          android:layout_width="wrap_content"
          android:text="@string/result"
          android:id="@+id/lblResult"
          android:layout_height="wrap_content"/>
</LinearLayout>

A tener en cuenta del código anterior

LinearLayout: Representa un contenedor en que los elementos se encuentran ordenados vertical o horizontalmente. Más información aquí

EditText: Cuadro de texto para entrar caracteres alfanuméricos.

TextView: Etiqueta para mostrar texto, hace falta poner epecial atención en que el texto que se muestra no se encuentra en el mismo fichero. "@string/result" significa que el texto se encuentra como recurso en el fichero values -> strings.xml

|filename|/images/android/strings.png

Programando la Activity

Una Activity representa una actividad en Google, se trata de un objecto que representa una pantalla.

|filename|/images/android/mainActivityEdit.png
package com.example.myapplication;

import android.content.Intent;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;


public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    public void sendAdd(View view) {
        EditText txtOp1 = (EditText) findViewById(R.id.operator1);
        EditText txtOp2 = (EditText) findViewById(R.id.operator2);
        try
        {
            int result =  Integer.parseInt(txtOp1.getText().toString()) + Integer.parseInt(txtOp2.getText().toString());
            TextView lblRes = (TextView) findViewById(R.id.lblResult);
            lblRes.setText(Integer.toString(result));
        }
        catch(Exception ex)
        {
            TextView lblRes = (TextView) findViewById(R.id.lblResult);
            String msg = "Error in operation, are operators correct?";
            lblRes.setText(msg);

            //Intent intent = new Intent(this, DisplayActivity.class);
            //intent.putExtra(DisplayActivity.EXTRA_MESSAGE, msg);
            //startActivity(intent);
        }
    }
}

A tener en cuenta

Cosas interesantes del código anterior:

protected void onCreate(Bundle savedInstanceState) {
  ...
  setContentView(R.layout.activity_main);
  ...

Esta línea indica que Layout (definición de pantalla en XML) se usara en esta actividad. En este caso hemos usado el layout activity_main, que corresponde al fichero activity_main.xml definido anteriormente.

public void sendAdd(View view) {
    EditText txtOp1 = (EditText) findViewById(R.id.operator1);
    EditText txtOp2 = (EditText) findViewById(R.id.operator2);
    ...

Estas dos líneas obtienen los operadores que ha introducido el usuario y los colocan en dos variables. txtOp1 y txtOp2.

public void sendAdd(View view) {
    ...
    try
    {
        int result =  Integer.parseInt(txtOp1.getText().toString()) + Integer.parseInt(txtOp2.getText().toString());
        TextView lblRes = (TextView) findViewById(R.id.lblResult);
        lblRes.setText(Integer.toString(result));
    }

Dentro de este bloque try, se transforman los operadores en enteros, y se asigna el resultado a una etiqueta definida en el Layout. El motivo del bloque try es que puede ocurrir un error si el usuario entra un número muy elevado o una letra por ejemplo.

Referencias

Web del programador de Android:

http://developer.android.com/

Enlaces a otros blogs