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
No hay comentarios:
Publicar un comentario