Android

ANDROID

Conversor

centímetro<-> pulgadas 


En esta practicas realizamos un conversor de centímetros(cm) a pulgadas (inch) y a la inversa.
Se emplean EditText, TextView, Button , además de respuestas a la pulsación de los botones.

Creamos un nuevo proyecto.



Le llamamos ConversorUnidades y seleccionamos las opciones como figuran en la imagen.


Aquí cambiamos el icono de la aplicación.


Para el tipo de actividad usamos Blank Activity.



Debemos hacer dos ajustes:
El primero en la pantalla de activity_main cambiar para que utilice la API 15 Android 4.0.3  .
Por defecto viene Android 4.4W,  este es para sistemas wearable (relojes,...). Estos modelos no permiten EditText por lo que nos dará error.


Y en menú Proyecto->Propiedades  seleccionar Android 4.0.3 .
Esto es debido a que por defecto viene otra opción, y cuando lanzamos la aplicacion al emulador nos señala que no es compatible con nuestro sistema, aunque funcione.



Empezamos a colocar todos los elementos.
Para ampliar en el navegador con el botón derecho dar ver imagen.
Como podemos ver el sistema de colocación es relativo a la posición de otro elemento, por lo que debemos estudiar como situar cada elemento, conviene hacer un croquis antes de empezar para no tener problemas posteriores.


Tenemos que dar un nombre ID para cada elemento, yo coloco el prefijo A para los elementos de activity_main.xml (Aentrada).
Indicamos el texto que aparecerá por defecto (2.54).
Para Aentrada indicamos alineación a la derecha, Gravity  right .
Para el caso de los botones indicamos la función a realizar, en el caso de Boton Cm->inch  indicamos FunCm.


Si examinamos  el fichero activity_main.xml podemos ver todas las propiedades de cada elemento.
<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="conversorunidades.seta43.MainActivity" >

    <EditText
        android:id="@+id/Aentrada"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginTop="20dp"
        android:ems="10"
        android:gravity="center_vertical|right"
        android:inputType="numberDecimal"
        android:text="2.54" >

        <requestFocus />
    </EditText>

    <TextView
        android:id="@+id/Atipo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/Aentrada"
        android:layout_alignBottom="@+id/Aentrada"
        android:layout_marginLeft="14dp"
        android:layout_toRightOf="@+id/Aentrada"
        android:text="cm" />

    <Button
        android:id="@+id/Abotoncm"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/Aentrada"
        android:layout_marginTop="20dp"
        android:onClick="FunCm"
        android:text="cm->inch" />

    <Button
        android:id="@+id/Abotoninch"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/Abotoncm"
        android:layout_alignBottom="@+id/Abotoncm"
        android:layout_toLeftOf="@+id/Atipo"
        android:onClick="FunInch"
        android:text="inch->cm" />

    <TextView
        android:id="@+id/Aresultado"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/Abotoncm"
        android:layout_marginTop="36dp"
        android:layout_toLeftOf="@+id/Atipo"
        android:gravity="right"
        android:text="1 in"
        android:textAppearance="?android:attr/textAppearanceLarge" />

</RelativeLayout>
activity_main.xml

 Después de crear todo el interface gráfico, empezamos con la programación.
Creamos las diferentes variables.
Para hacer cálculos en coma flotante .
double MiEntrada,MiResultado;
Dos cadenas para la entrada y el resultado.
String StEntrada,StResultado;
Para cada elemento gráfico que queramos modificar .
private EditText WEntrada;
private TextView WResultado,WTipo;

public class MainActivity extends ActionBarActivity
    {
    double MiEntrada,MiResultado;
    String StEntrada,StResultado;
    private EditText WEntrada;
    private TextView WResultado,WTipo;
Para cada elemento gráfico que queramos modificar debemos encontrarlo y asignarle una variable.
WEntrada=(EditText)findViewById(R.id.Aentrada);
WResultado=(TextView)findViewById(R.id.Aresultado);
WTipo=(TextView)findViewById(R.id.Atipo);

protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        WEntrada=(EditText)findViewById(R.id.Aentrada);
        WResultado=(TextView)findViewById(R.id.Aresultado);
        WTipo=(TextView)findViewById(R.id.Atipo);
    }
Creamos las funciones de cada botón.
public void FunCm(View view)
    {
        StEntrada=WEntrada.getText().toString();
        MiEntrada=Double.parseDouble(StEntrada);
        MiEntrada= MiEntrada / 2.54;       
        StResultado = String.format("%1.2f in", MiEntrada);
        WResultado.setText(StResultado);
       
        WTipo.setText("cm");    
    }
   
    public void FunInch(View view)
    {
        StEntrada=WEntrada.getText().toString();
        MiEntrada=Double.parseDouble(StEntrada);
        MiEntrada= MiEntrada * 2.54;
        StResultado = String.format("%1.2f cm ", MiEntrada);
        WResultado.setText(StResultado);
       
        WTipo.setText("in");
    }
}

Como vemos nos produce error en cada widget que no hemos declarado.
O lo colocamos a mano, o le damos a Import  "TextView" y lo importa automáticamente.


Declaración a mano de los diferentes Widgets.
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;

import android.view.View;
import android.widget.EditText;
import android.widget.TextView;


package conversorunidades.seta43;

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;

import android.view.View;
import android.widget.EditText;
import android.widget.TextView;


public class MainActivity extends ActionBarActivity
    {
    double MiEntrada,MiResultado;
    String StEntrada,StResultado;
    private EditText WEntrada;
    private TextView WResultado,WTipo;
   

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        WEntrada=(EditText)findViewById(R.id.Aentrada);
        WResultado=(TextView)findViewById(R.id.Aresultado);
        WTipo=(TextView)findViewById(R.id.Atipo);
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu)
    {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item)
        {
       
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
    public void FunCm(View view)
    {
        StEntrada=WEntrada.getText().toString();
        MiEntrada=Double.parseDouble(StEntrada);
        MiEntrada= MiEntrada / 2.54;       
        StResultado = String.format("%1.2f in", MiEntrada);
        WResultado.setText(StResultado);
       
        WTipo.setText("cm");    
    }
   
    public void FunInch(View view)
    {
        StEntrada=WEntrada.getText().toString();
        MiEntrada=Double.parseDouble(StEntrada);
        MiEntrada= MiEntrada * 2.54;
        StResultado = String.format("%1.2f cm ", MiEntrada);
        WResultado.setText(StResultado);
       
        WTipo.setText("in");
    }
}

MainActivity.java

Probamos nuestro programa en el emulador.


También lo probamos en un terminal físico.


ConversorUnidades.zip

Espero que os guste este pequeño tutorial. Es un tutorial sin pretensiones de un novato en la programación de android.

Saludos
Juan Galaz


Bibliografía:
http://www.blogdemigueldiaz.com/2012/08/programacion-en-android-para-torpes-iv-asignar-eventos-a-elementos/
http://www.javaya.com.ar/androidya/
http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=536
http://www.nachocabanes.com/android/
http://downloads.puresoftware.org/files/android/
http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=536
http://www.yofriki.com/2013/03/instalar-eclipse-y-sdk-android-en.html
http://www.ubuntu-es.org/node/181017#.VxD7yxcshaU