Tips Android #1

En esta entrada voy a comenzar una nueva serie de post donde voy a daros consejos de cómo solucionar varios problemas con los que me he encontrado al desarrollar bajo la plataforma Android, mostrando las soluciones que he ido tomando en cada caso. Espero que os sirva para perder menos tiempo que el que he perdido yo para ir superando cada obstáculo.

1) Control de una aplicación Android al pulsar boton HOME o BACK

La única solución de solventar esta tarea de manera correcta es tener presente todo el tiempo el ciclo de actividad que tiene una actividad Android.

Cada vez que el usuario pulsa el teclado se ejecuta el siguiente metodo onKeyDown, que podemos sobreescribir y poder controlar cualquier pulsación.

public boolean backButton = false;
public boolean homeButton = false;

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
	    if (keyCode == KeyEvent.KEYCODE_BACK) {
	    	backButton = true;
	     	finish();
	     return true;
	    }else if(keyCode == KeyEvent.KEYCODE_HOME){
	    	homeButton = true;
	    }
	    return super.onKeyDown(keyCode, event);
}

Cuando el usuario pulsa el botón HOME o el boton BACK, la actividad entra en modo Pausa por tanto se ejecuta el siguiente método, que puedes controlar de la siguiente manera:

@Override 
public void onPause(){
	    super.onPause();
	    Log.v("TAG", "onPause" );
	    if(backButton){
	        //Aquí controlamos el boton BACK
	    }else if(homeButton){
	        //Aquí controlamos el boton HOME
	    }
	   backButton = false;
   homeButton = false;
}

Esto es muy útil para cantidad de cosas, como por ejemplo apagar la música del juego, grabar el estado actual del juego, etc…Tenemos que tener claro que cuando se vuelva a ejecutar nuevamente el juego, pasará al estado “Resume”, donde debemos recuperar la situación que teníamos antes del Pause.

@Override 
public void onResume(){
	    super.onResume();
	    //Aquí añadiremos la situación a recuperar
}

2) Creación de un componente totalmente personalizado.
Aqui os muestro un ejemplo de como podemos crear un boton, asignarle un layout, una fuente, un color, una imagen y todo lo que necesitemos para personalizar nuestros TextView, ImageView, Button y cualquier otra Views.

Typeface tf = Typeface.createFromAsset(this.getAssets(),"font/nombreFuente.ttf");
Button btnEjemplo = new Button(this); //creación boton
btnEjemplo.setTextSize(30);//tamaño texto
btnEjemplo.setGravity(Gravity.CENTER); //punto de gravedad
btnEjemplo.setWidth((int)(250*this.getResources().getDisplayMetrics().density)); //anchura boton dependiente de la resolucion pantalla
btnEjemplo.setTextColor(Color.WHITE); //color de texto
FrameLayout.LayoutParams layoutParamsEjemplo = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT, Gravity.CENTER_HORIZONTAL); //creación de posicionamiento para fijar el nuevo layOut
layoutParamsEjemplo.setMargins(0, (int)(40*getResources().getDisplayMetrics().density), 0, 0); //asignación de margenes
btnEjemplo.setLayoutParams(layoutParamsEjemplo);  //asignación del layOut al boton
btnEjemplo.setTypeface(tf); //asignacion de la fuente al boton
btnEjemplo.setShadowLayer(3, 0, 0, Color.BLACK); //asignación de la sombra al texto del boton
btnEjemplo.setBackgroundDrawable(getResources().getDrawable(R.drawable.NombreImagen));
btnEjemplo.setOnClickListener(new OnClickListener() {
         @Override
	public void onClick(View v) {
	//pulsacion del boton
        }
});
This entry was posted in Android. Bookmark the permalink.

6 Responses to Tips Android #1

  1. Marta says:

    Buenas!

    Soy nueva con Android y Java, pero estoy haciendo una aplicación y tengo un par de problemas: Necesito crear un botón Home y un Back Button en pantalla. El problema es que al parecer me quedo estancada en la actividad, pero no sé cómo solucionarlo.

    Había creado un par de clases asociadas a esos botones, pero como te digo, esto no chuta.. 🙁 Paso a la ventana anterior y se acabó! No me deja pulsar los botones de las ventanas anteriores…

    Puedes echarme una mano, por favor???

    Saludos!

  2. eetayo says:

    Vale, te hecho una mano. Pero necesito que me des mas detalles y/o que me envies el proyecto. mi mail: eetayo@gmail.com

  3. Marta says:

    Hey, buenas!!

    Muchísimas gracias por tu ayuda, pero al final lo he solucionado!! 😀

    Me temo que ayer, después de horas y horas programando la aplicación, acabé hipersaturada… Había cometido un error de sintaxis con el intent y por eso no funcionaba…

    Perdón por las molestias y gracias de nuevo! 🙂

  4. eetayo says:

    Genial!! Así es como mas se aprende!! Un Saludo!!

  5. Miguel Angel says:

    Hola muchas gracias por el crear el blog desde aquí tienes un nuevo seguidor. Bueno le iba a consultar una duda por si usted sabría como resolverla viene al hilo del botón back (me indique el camino sino no aprendemos 🙂 ). Tengo en mi PFC una aplicación que tiene varias pantallas y claro la pila va aumentando ya que no elimino ninguna. Mi objetivo es guardar sólo la última pantalla para poder regresar a ella a través del back (esto es por defecto) pero no consigo saber como guardar esa pantalla. Me explico con un ejemplo:
    ACTUALMENTE: voy de pantalla 1 -> pantalla 2 -> pantalla 3
    tengo en pila las 3 pantallas, con el back voy de la 3 a la 2 y para finalizar a la 1

    Objetivo que al llegar a la pantalla 3 desaparezca de la pila la pantalla 1 ya que tengo la 2 en pila

    Saludos y gracias de antemano.

  6. eetayo says:

    Hola Miguel Angel,
    Muchas gracias por seguirme.
    La verdad que no termino de entender el porque quieres hacer eso, no le veo demasiado sentido el cargarte de la pila la Pantalla1 cuando llegues a la pantalla3. El sistema guarda una referencia de la actividad que apenas tiene consumo sobre el procesamiento global. Solo has de eliminar de la pila la referencia con finish(); cuando pasas de la pantalla3 a la pantalla2

    Un Saludo!

Leave a Reply

Your email address will not be published. Required fields are marked *