Bienvenidos sean a este post, hoy veremos un uso practico de un layout por medio de un elemento, en este caso un boton, veremos como trabajarlo por medio de los archivos XML y luego veremos otro para trabajarlo por medio de codigo Java.

Anuncios

Antes de comenzar con nuestro proyecto deberemos descargar este archivo

Estos van a ser los estados de nuestro boton pasemos a crear nuestro proyecto con las siguientes caracteristicas:

  • Dispositivos: Phone and Tablet
  • Actividad: Empty Activity
  • Nombre: Mas Vistas
  • Nombre de paquete: org.example.masvistas
  • API Minimo: API 14 (Android 4.0)

Una vez geneado nuestro proyecto nos quedara de la siguiente manera

android86
Anuncios

Luego haremos click con el boton derecho sobre el recurso drawable y elegiremos New -> drawable resource file como se ve en la siguiente imagen

android87

Una vez hecho esto debera aparecer el siguiente cuadro

android88

Aca completaremos el campo File Name con simplemente boton deben dejar todo como se ve en la imagen anterior, pulsemos Ok y esto generara un archivo boton.xml como se ve en la siguiente imagen

Anuncios
android89

Si abrimos este archivo y elegimos la solapa Text tendremos el siguiente codigo:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

</selector>
Anuncios

Ahora vamos a modificarlo por el siguiente codigo:

<?xml version="1.0" encoding="utf-8"?>
<selector
    xmlns:android="http://schemas.android.com/apk/res/android">

   <item android:state_pressed="true"
       android:drawable="@drawable/boton_pulsado" />

    <item android:state_focused="true"
        android:drawable="@drawable/boton_foco" />

    <item android:drawable="@drawable/boton_normal" />
</selector>

Este simple codigo fuente se encargara de mostrarnos tres estados posibles del boton, a medida que lo escriben puede quedar marcado como error pero por ahora no se preocupen esto es por el hecho de no tener los archivos mencionados dentro del recurso drawable, como pueden ver en el primer item mostrara el archivo del estado del boton pulsado cuando el estado presionado sea verdad, el segundo item se mostrara cuando este seleccionado y el ultimo item nos mostrara el boton en estado normal, por ahora lo veremos simplemente de esta forma pero en un futuro post ahondaremos mas sobre los drawables.

Anuncios

Si descargaron el archivo mencionado al principio de este post, va a contener tres archivos los cuales nos representaran los tres estados del codigo anterior, los archivos son los siguientes

Anuncios

Ahora pasaremos a corregir el error del codigo, primero deben extraer los archivos en alguna carpeta

android07

El siguiente paso es seleccionar a los tres y copiarlos, con la opcion del boton derecho o con Ctrl+C, una vez hecho debemos ir a nuestro Android Studio y pegarlos en el recurso drawable como se ve en la siguiente imagen

android91
Anuncios

Si todo es correcto, aparecera el siguiente cuadro

android92

Aca deben seleccionar el recurso drawable y presionar Ok, donde aparecera el siguiente cuadro

android93

Aca deben dejarlo como aparece y presionar Ok, si todo salio bien debera aparecer como la siguiente imagen

android18
Anuncios

Observen como se agregaron los tres archivos debajo del recurso drawable y observen como en el codigo, en la linea  de cada uno de los items ahora aparece la figura correspondiente, para nuestro siguiente paso vamos a implementarlo, para eso abrimos el archivo activity_main.xml, esta ubicado en res/layout/activity_main.xml, iremos a la solapa Design y modificaremos nuestro diseño del generado automaticamente por el de RelativeLayout, para ello primero eliminaremos el elemento TextView generado de manera predeterminada, ya sea presionando Supr o como se ve en la siguiente imagen

android95
Anuncios

Una vez eliminado, debemos convertir nuestro actual layout (ConstraintLayout) a RelativeLayout por medio de la opcion Convert view

android96

Una vez seleccionado nos aparecera el siguiente cuadro

android97

Aca debemos seleccionar RelativeLayout y pulsen Apply, con esto convertiremos nuestro layout, ahora debemos seleccionarlo y mirar en las propiedades del mismo, este se encuentra en el lado derecho de la pantalla, ahi debemos modificar el campo background para alcanzar esta propiedad deben el menu de All Attributes como se ve en la siguiente imagen

Anuncios

Una vez seleccionado le asignaremos el valor de #FFFFFF para tener el fondo en blanco, debera quedar como se ve en la siguiente imagen

Para nuestro siguiente paso vamos a agregar nuestro elemento, en este caso el boton, primero vamos a seleccionar el elemento Button como se ve en la siguiente imagen

android00
Anuncios

Presionamos Enter y lo agregamos quedando de la siguiente forma

android01

Ahora si nos fijamos a la derecha, tendremos las propiedades del boton y debemos seleccionar a Declared Attributes, seleccionen el campo Text y eliminen su contenido para que no aparezca en pantalla

Una vez hecho esto procederemos a utilizar el recurso drawable creado por nosotros como boton, para esto debemos ir al campo background en las solapas Common Attibutes y seleccionar el boton resaltado en la siguiente imagen, esta opcion nos permitira cargar recursos en nuestro elementos como en este caso

Anuncios

Una vez pulsado nos aparecera el siguiente cuadro

En esta ocasion nos aparecio directamente seleccionado Drawable y tendremos todos los elementos disponibles en nuestros recursos, a continuacion seleccionaremos el elemento llamado boton y nos aparecera de la siguiente forma

Como pueden ver al seleccionarlo veran los tres estados disponibles, cuando este seleccionado pulsan Ok y se cerrara la ventana quedando el background de la siguiente forma

Anuncios

Ahora veamos como quedo el codigo fuente de nuestro archivo activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ffffff"
    tools:context=".MainActivity" >

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/boton" />
</RelativeLayout>

Ahora nos quedan los ultimos dos pasos para completar nuestro proyecto, primero vamos a agregar un evento en nuestro boton, a este tipo de eventos en general se lo llaman listeners (escuchadores) porque son rutinas encargadas de verificar si el evento asignado es ejecutado y por ende correr el metodo (o funcion) asociado, veamos la modificacion del codigo fuente:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:background="#FFFFFF"
     tools:context=".MainActivity">

    <Button
         android:id="@+id/button"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:background="@drawable/boton"
         android:onClick="sePulsa" />
Anuncios

Como ven en el “nuevo” codigo fuente solamente agregamos una linea:

android:onClick="sePulsa"

La cual agrega el listener antes explicado, el cual espera el evento “click”, es decir el pulsar nuestro elemento, en este caso el boton, para ejecutar el metodo sePulsa() que todavia no existe, ahora solamente debemos modificar el archivo MainActivity.java para agregar este metodo. Pasemos a ver el codigo de este archivo:

package org.example.masvistas;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

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

Este es nuestro codigo basico, ahora para agregar nuestro nuevo metodo debemos hacerlo al final del codigo pero antes de la ultima llave (}) como se ve a continuacion:

Anuncios
package org.example.masvistas;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

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

    public void sePulsa(View vista){
        Toast.makeText(this,"Pulsado",Toast.LENGTH_SHORT).show();
    }
}

Como pueden ver el texto no cambio mucho, solo por esta funcion:

public void sePulsa(View view)
{
	Toast.makeText(this,"Pulsado",Toast.LENGTH_SHORT).show();
}
Anuncios

Con esta funcion haremos la aparicion de un texto en pantalla, los parametros del metodo makeText() son:

  • this, le decimos que utilice la vista actual para mostrarlo
  • “Pulsado”, va a ser el texto a mostrar
  • Toast.LENGTH_SHORT, va a ser la duracion en pantalla del mensaje

El ultimo metodo show se encarga de mostrarlo en pantalla, a medida que lo vayan agregando el editor les va a sugerir presionar Alt+Enter para agregar los paquetes faltantes pueden hacerlo mientras escriben o al final pero tienen que hacerlo sino no va a funcionar, si todo salio bien y probamos nuestra app obtendremos el siguiente resultado

Anuncios

Con esto concluimos la primera parte, pasemos a la segunda parte donde vamos a crear una nueva app con las siguientes caracteristicas:

  • Dispositivos: Phone and Tablet
  • Actividad: Empty Activity
  • Nombre: Otras Vistas
  • Nombre de paquete: org.example.otrasvistas
  • API Minimo: API 14 (Android 4.0)

Una vez creado nuestro nuevo proyecto vamos a empezar a agregar nuestros componentes y a reformar nuestro layout, empecemos cambiando el layout. Para esto vamos al archivo activity_main.xml, y debemos hacer click con el boton derecho y elegir Convert view

android08

Una vez seleccionado aparecera el siguiente cuadro

android09
Anuncios

Aca debenos seleccionar LinearLayout y pulsar el boton Apply, nuestra siguiente paso sera convertirlo en sentido vertical, para esto volvemos a hacer click con el boton derecho y elegir LinearLayout -> Convert orientation to vertical

android10

Una vez realizado todo esto, procederemos a agregar dos elementos y a aprovechar el elemento existente, primero vamos a agregar un item Number (Decimal)

android11
Anuncios

Luego agregaremos el item Button en el listado

android12

Y por ultimo, una vez agregado deberemos ordenar nuestros elementos en el siguiente orden:

  • editText
  • Button
  • TextView

Este orden se puede ver en la siguiente imagen

android13
Anuncios

Con todo esto creado pasemos a ver el codigo generado en nuestro archivo de layout:

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    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:id="@+id/editText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ems="10"
        android:inputType="numberDecimal" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!" />

</LinearLayout>

Nuestra modificacion sera en el bloque EditText donde lo cambiaremos por el siguiente:

    <EditText
        android:id="@+id/entrada"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ems="10"
        android:inputType="numberDecimal"
        android:hint="Ingresa un numero" />

En este caso modificaremos el id por el valor de entrada y por ultimo agregamos el campo hint donde lo usaremos para indicar un aviso de que debemos ingresar en nuestro campo, nuestro siguiente modifcacion sera en el bloque de Button:

    <Button
        android:id="@+id/button0"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="sePulsa"
        android:text="0" />
Anuncios

En este caso cambiaremos nuevamente el id y despues modificaremos el valor del texto a mostrar, tambien volvemos a agregar el evento onClick para llamara a la funcion sePulsa, puede dejarla marcada como error pero no se preocupen porque pronto lo solucionaremos, nuestra ultima modificacion sera en el bloque TextView:

    <TextView
        android:id="@+id/respuesta"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text=""
        android:hint="Respuesta"/>

En este bloque agregaremos un id para identificar a este elemento, el cual se llamara respuesta, y otro hint para indicar que devolvera este campo, por ultimo debemos eliminar el valor de text como se ve en el bloque, con todo esto ya solo nos falta modificar a la clase MainActivity pero antes veamos el codigo final de este archivo:

Nota: En todos los casos tambien modificamos el valor de layout_width y layout_height con el mismo esquema

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    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:id="@+id/entrada"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:inputType="numberDecimal"
        android:hint="Ingresa un numero" />

    <Button
        android:id="@+id/button0"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="sePulsa"
        android:text="0" />

    <TextView
        android:id="@+id/respuesta"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text=""
        android:hint="Respuesta"/>

</LinearLayout>
Anuncios

Con todo esto completo vamos a proceder a modificar MainActivity con el siguiente codigo:

MainActivity.java

package org.example.otrasvistas;

import androidx.appcompat.app.AppCompatActivity;

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

public class MainActivity extends AppCompatActivity {

    private EditText entrada;
    private TextView respuesta;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        entrada = (EditText) findViewById(R.id.entrada);
        respuesta = (TextView) findViewById(R.id.respuesta);
    }

    public void sePulsa(View vista){
       respuesta.setText(String.valueOf(
               Float.parseFloat(entrada.getText().toString())*2));
    }
}

En este codigo primero crearemos dos objetos, uno de tipo EditText y otro de tipo TextView llamadas entrada y respuesta respectivamente, luego tenemos el bloque onCreate donde tendremos estas dos lineas:

        entrada = (EditText) findViewById(R.id.entrada);
        respuesta = (TextView) findViewById(R.id.respuesta);

Las dos primer lineas son para definir a los objetos creados anteriormente en este caso el valor entre parentesis esta hecho para asegurarnos que el valor devuelto del mismo tipo que el objeto, en esta ocasion usaremos findViewById. Este metodo nos permite buscar una vista por medio de su id, por este motivo le asignamos un id a cada elemento, utilizaremos el recurso R para indicar que lo busque en res, despues le decimos que lo busque entre los ids de nuestro proyecto y por ultimo le indicamos cual id debe buscar, por un motivo practico le designamos el mismo nombre que el elemento para saber identificarlo mas facil, con esto logramos que todo el contenido de nuestros elementos pueda ser manipulado por Java en estos dos objetos, pasemos a hablar sobre la funcion sePulsa:

Anuncios
    public void sePulsa(View vista){
       respuesta.setText(String.valueOf(
               Float.parseFloat(entrada.getText().toString())*2));
    }

En esta funcion utilizaremos a respuesta para setearle un texto por medio de setText y para ello usamos el metodo valueOf de la clase String donde por medio del metodo parseFloat de la clase Float, en estos dos casos no usamos los primitivos porque necesitamos acceso a estos metodos propios de estas clases, para parseFloat le enviamos el valor contenido en el elemento de entrada por medio del metodo getText y lo convertiremos en texto por medio de toString, este valor obtenido y convertido por parseFloat lo multiplicamos por 2, con todo esto procesado y asignado a respuesta deberiamos verlo en pantalla, si lo compilamos y probamos veremos una salida semejante al siguiente video

Si lograron esto, Felicitaciones!!! Hasta aca hemos logrado nuestras nuevas apps que pueden interactuar con los usuarios y hemos visto como trabajar con layouts y Java.

Anuncios

En resumen, hoy hemos visto como crear un recurso del tipo drawable, luego vimos como utilizar este mismo recurso en un item dentro de una app, como creamos un metodo el cual nos mostraba un texto en pantalla y vimos como cambiaba su estado, luego con otra app vimos como modificar los contenidos de un elemento de la misma por medio de codigo Java. Espero les haya gustado, sigueme en Twitter, Facebook o Google+ para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Tengo un Patreon donde podes acceder de manera exclusiva a material para este blog antes de ser publicado, sigue los pasos del link para saber como.

Tambien podes donar

Es para mantenimiento del sitio, gracias!

$1.00