8 - Control ImageButton


Hemos visto la creación de objetos de la clase Button, ahora veremos otra clase muy similar a la anterior llamada ImageButton que tiene la misma filosofía de manejo con la diferencia que puede mostrar una imagen en su superficie.

Problema:

Disponer un objeto de la clase ImageButton que muestre una imagen de un teléfono. Cuando se presione mostrar en un control TextView el mensaje "Llamando".

Primero crearemos un proyecto llamado proyecto007 y luego debemos buscar una imagen en formato png que represente un telefono de 50*50 píxeles.
Nombre del archivo: telefono.png
Ahora copiamos el archivo a la carpeta de recursos de nuestro proyecto : Proyecto007/app/src/main/res/drawable-mdpi
Esto lo podemos hacer desde el administrador de archivos del sistema operativo.
En la ventana "Project" cambiamos a vista "Project Files" y navegamos hasta la carpeta donde copiamos el archivo, vemos que el archivo está en dicha carpeta:

Project Project Files

Esto solo a efectos de ver que el proyecto se actualiza con los archivos de recursos que compiamos a las carpetas drawable.

Ahora insertaremos el objeto de la clase ImageButton en el formulario de nuestra aplicación. La clase ImageButton se encuentra en la pestaña "Widgets":

control ImageButton en android

Seguidamente seleccionamos la propiedad "src" del objeto ImageButton que acabamos de disponer y en dicho diálogo buscamos el nombre de la imagen que copiamos en la carpeta drawable-mdpi:

control ImageButton en android

Inicializamos la propiedad ID con el nombre bi1

Agreguemos un TextView a nuestra aplicación y configuremos sus propiedades ID (con tv1) y text. Luego la interfaz visual debe ser similar a:

control imagebutton

Código fuente:

package ar.com.tutorialesya.proyecto007;

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.TextView;


public class MainActivity extends ActionBarActivity {

    private TextView tv1;

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

        tv1=(TextView)findViewById(R.id.tv1);
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, 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();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    //Este método se ejecutará cuando se presione el ImageButton
    public void llamar(View view) {
        tv1.setText("Llamando");
    }
}

Definimos el atributo de tipo TextView:

    TextView tv1;

Enlazamos el control definido en el archivo XML y la variable de java:

        tv1=(TextView)findViewById(R.id.tv1);

Implementamos el método que se ejecutará cuando se presione el el objeto de la clase ImageButton:

    public void llamar(View view) {
        tv1.setText("Llamando");
    }

No olvidemos inicializar la propiedad onClick del objeto ib1 con el nombre del método "llamar" (recordemos que esto lo hacemos accediendo a la propiedad On Click en la ventana de "Properties")

Este proyecto lo puede descargar en un zip desde este enlace: proyecto007.zip

Comentarios extras de este control.

Cuando copiamos el archivo lo hicimos a la carpeta:

drawable-mdpi

Pero vimos que hay otras carpetas con nombres similares:

 
drawable-ldpi
drawable-hdpi
drawable-xhdpi
drawable-xxhdpi

El objetivo de estas otras carpetas es guardar las mismas imágenes pero con una resolución mayor si la guardamos en drawable-hdpi y con una resolución menor al guardarla en drawable-ldpi.

Esto se hace si queremos que nuestra aplicación sea más flexible si se ejecuta en un celular, en un tablet, en un televisor etc.

Debemos tener en cuenta estos tamaños:

En la carpeta res/drawable-mdpi/
(guardamos la imagen con el tamaño original)

En la carpeta res/drawable-ldpi/
(guardamos la imagen con el tamaño del 75% con respecto al de la carpeta drawable-mdpi)

En la carpeta res/drawable-hdpi/
(guardamos la imagen con el tamaño del 150% con respecto al de la carpeta drawable-mdpi)

En la carpeta res/drawable-xhdpi/
(guardamos la imagen con el tamaño del 200% con respecto al de la carpeta drawable-mdpi)

En la carpeta res/drawable-xxhdpi/
(guardamos la imagen con el tamaño del 300% con respecto al de la carpeta drawable-mdpi)


Retornar