viernes, 11 de julio de 2014

Mi primera App con Android. BPCalculator.

Buenas gente, ¿qué tal? Acabo de depurar la aplicación que hice antes de ayer y ya os puedo mostrar de qué va. Os cuento... Resulta que por ser de la UMA, tengo una tarjeta para la BP mediante la cual me descuentan 5 céntimos por litro, pero me los dan en mano. Pues como hay veces que llevo 4,60 y pocos euros y cosas así, me decidí a hacer una calculadora con la que poder ver lo que me iba a costar y cuánto me iban a echar. Ésta es la version 1.0. Quiero poder hacer que busque directamente el precio, pero eso será más adelante cuando aprendamos a conectar la aplicación con la web. El proyecto en git lo tenéis por aquí.

Antes de nada os aconsejaría que en vez de usar las máquinas virtuales de Android uséis vuestro teléfono, que irá mil veces mejor (ayer me dijeron que en el eclipse de Linux, las máquinas van perfectas; pero aún no lo he podido probar). Si no sabéis cómo conectar el móvil, preguntad ;)

Aquí tenéis una imagen del aspecto de la aplicación:


Ésto lo podéis hacer editando el activity.xml (es uno de los dos archivos que se os abren). De todos modos, aquí os dejo el mío:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    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="com.NikNitro.bpcalculator.Calculator" >

    <GridLayout
        android:id="@+id/gridLayout1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:layout_marginTop="25dp"
        android:alignmentMode="alignBounds"
        android:columnCount="2"
        android:useDefaultMargins="true" >

        <TextView
            android:id="@+id/textView1"
            android:layout_width="102dp"
            android:layout_column="0"
            android:layout_gravity="left|top"
            android:layout_row="0"
            android:text="Precio"
            android:textAppearance="?android:attr/textAppearanceLarge" />

        <TextView
            android:id="@+id/textView2"
            android:layout_column="1"
            android:layout_gravity="center"
            android:layout_row="0"
            android:text="Cantidad(€)"
            android:textAppearance="?android:attr/textAppearanceLarge" />

        <EditText
            android:id="@+id/Cantidad"
            android:layout_width="106dp"
            android:layout_column="0"
            android:layout_gravity="left|center_vertical"
            android:layout_row="1"
            android:ems="10"
            android:inputType="numberDecimal" />

        <EditText
            android:id="@+id/Precio"
            android:layout_width="121dp"
            android:layout_column="1"
            android:layout_gravity="center"
            android:layout_row="1"
            android:ems="10"
            android:inputType="numberDecimal" />

    </GridLayout>

    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/gridLayout1"
        android:layout_below="@+id/gridLayout1"
        android:layout_marginTop="26dp"
        android:text="Aceptar" />

    <GridLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/button"
        android:layout_below="@+id/button"
        android:layout_marginTop="75dp"
        android:columnCount="2"
        android:useDefaultMargins="true" >

        <TextView
            android:id="@+id/textView3"
            android:layout_width="126dp"
            android:layout_column="0"
            android:layout_gravity="right|top"
            android:layout_row="0"
            android:text="Vas a Pagar"
            android:textAppearance="?android:attr/textAppearanceLarge" />

        <TextView
            android:id="@+id/textView4"
            android:layout_width="124dp"
            android:layout_gravity="left"
            android:text="Vas a Tener"
            android:textAppearance="?android:attr/textAppearanceLarge" />

        <TextView
            android:id="@+id/Pago"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="left"
            android:textAppearance="?android:attr/textAppearanceLarge" />

        <TextView
            android:id="@+id/Compra"
            android:layout_gravity="left"
            android:textAppearance="?android:attr/textAppearanceLarge" />

    </GridLayout>

</RelativeLayout>
Como veis no es nada difícil de comprender (no digo nada de hacerlo, solo de entenderlo :P). Bueno, aquí os dejo ahora el código de la aplicación (el cual es más sencillo aún).

package com.NikNitro.bpcalculator;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class Calculator extends Activity implements OnClickListener{
 //Botón
 private Button boton;
 //Texto Editable por el usuario
 private EditText litros, precio;
 //Texto SÓLO legible por el usuario
 private TextView compra, preciofinal;
 // Variables enteras
 private double dlitros, dprecio, dcompra, dpreciofinal;
 
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  //Éste método se ejecuta el primero al iniciar la aplicación.
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_calculator);
  
  initialize();
 }

 private void initialize() {
  // TODO Auto-generated method stub
  boton = (Button)findViewById(R.id.button);
  //Añado al botón el controlador.
  boton.setOnClickListener(this);
  //Así es como se inicializan los objetos para que queden
  // linkeados con el activity.
  litros = (EditText)findViewById(R.id.Cantidad);
  precio = (EditText)findViewById(R.id.Precio);
  compra = (TextView)findViewById(R.id.Compra);
  preciofinal = (TextView)findViewById(R.id.Pago);
  
  
 }

 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  // Inflate the menu; this adds items to the action bar if it is present.
  getMenuInflater().inflate(R.menu.calculator, menu);
  return true;
 }

 @Override
 public boolean onOptionsItemSelected(MenuItem item) {
  // Handle action bar item clicks here. The action bar will
  // automatically handle clicks on the Home/Up button, so long
  // as you specify a parent activity in AndroidManifest.xml.
  int id = item.getItemId();
  if (id == R.id.action_settings) {
   return true;
  }
  return super.onOptionsItemSelected(item);
 }

 @Override
 public void onClick(View v) {
  // Al hacer click en algún botón, se llama aquí.
  //Si tuvieramos más de un botón tendríamos que ver a cual se refiere. Para ello usamos la v que nos pasan.
  calcular();
  mostrarToast("Cálculo completo");
 }

 private void mostrarToast(String string) {
  //Muestra un mensaje
  Toast texto1 = Toast.makeText(getBaseContext(), string, Toast.LENGTH_SHORT);
  texto1.show();
  
 }

 private void calcular() {
  try {
   dlitros = Double.parseDouble(litros.getText().toString());
   dprecio = Double.parseDouble(precio.getText().toString());
   double prec = Math.rint(dprecio*100/dlitros)/100;
   compra.setText(prec+"");
   double desc = prec*0.05;
   preciofinal.setText((dprecio-desc)+"");
  } catch (Exception e) {
   mostrarToast("Rellene todos los campos correctamente, por favor");
  }
  
 }
 
 
}

Jeje, bueno, espero que no os queden dudas y (si os quedan) las preguntéis, pues estaré encantado de responderos. Un saludo y hasta la próxima ;)

No hay comentarios:

Publicar un comentario