Android. Juego del Ahorcado (IV). Entradas de menú.

tutorial android castellanoEn el último post, dejamos creado un menú para que nos ayude a mantener la configuración del juego. En este post, vamos a dar detalle a dicha configuración. Tendremos dos entradas: una para activar o desactivar la música de fondo, y otra para decirle al juego que ponga una letra de la palabra visible, como ayuda.

Lo primero, creamos el fichero Proyecto Ahorcado -> res -> xml -> settings.xml (si no tienes la carpeta xml creada, créala pulsando con el botón derecho en la carpeta res y luego selecciona New -> Folder). Lo que tienes que tener en cuenta es que, al crear este fichero, no olvides marcar la opción “Preference” que aparece entre los posibles tipos de fichero, como puedes ver en la siguiente imagen.

tutorial android castellano. preferences

El aspecto del fichero será el siguiente:

<?xml version=”1.0″ encoding=”utf-8″?>
<PreferenceScreen
xmlns:android=”http://schemas.android.com/apk/res/android”&gt;
<CheckBoxPreference
android:key=”música”
android:title=”@string/titulo_audio”
android:summary=”@string/etiqueta_audio”
android:defaultValue=”true” />
<CheckBoxPreference
android:key=”Con ayuda”
android:title=”@string/titulo_conayuda”
android:summary=”@string/etiqueta_conayuda”
android:defaultValue=”false” />
</PreferenceScreen>

Este fichero define dos controles de tipo CheckBoxPreference, uno para cada elemento de la configuración.

Al guardar, nos dará errores ya que no tenemos creadas las entradas: titulo_conayuda, etiqueta_conayuda en el fichero de cadenas de texto Proyecto Ahorcado -> res -> values -> strings.xml. Ya sabemos cómo crearlas. Si no es así, recomiendo que leas de nuevo el post Añadiendo un menú. El fichero strings.xml quedará de la siguiente forma:

<?xml version=”1.0″ encoding=”utf-8″?>
<resources>
<string name=”app_name”>Ahorcado</string>
<string name=”titulo_principal”>El juego del Ahorcado</string>
<string name=”nuevo_juego”>Empezar nuevo juego</string>
<string name=”salir”>Salir</string>
<string name=”titulo_config”>Configuración de Ahorcado</string>
<string name=”etiqueta_config”>Configuración</string>
<string name=”tecla_config”>c</string>
<string name=”titulo_audio”>Audio</string>
<string name=”etiqueta_audio”>Activar música de fondo</string>
<string name=”titulo_conayuda”>Ayuda</string>
<string name=”etiqueta_conayuda”>Activar ayuda</string>
</resources>

Ahora que ya tenemos los textos y el fichero settings.xml, vamos a tocar un poco el código de la clase Ahorcado.java para hacer funcionar las opciones del menú. A continuación puedes ver los cambios (en negrita) que se han efectuado en dicha clase. Piensa que tomamos como base el código que teníamos en la clase Ahorcado.java al acabar el post Añadiendo un menú.

package misejemplos.ahorcado;

import android.app.Activity;
import android.os.Bundle;
import android.content.Intent;

import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;

public class Ahorcado extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
MenuInflater preparamenu = getMenuInflater();
preparamenu.inflate(R.menu.menu, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.config:
startActivity(new Intent(this, Configuracion.class));
return true;

}
return false;
}

}

Como puedes ver, lo que hemos hecho es importar la clase Intent y además añadir (redefiniendo) el método onOptionsItemSelected. Traducido significa que lo que vamos a hacer es crear una nueva Activity que lo que hará será leer de la clase Configuracion para crear dicha Activity.

La clase Configuracion no existe aún, por lo que tendremos un error. Vamos a crear dicha clase. Quedará de la siguiente forma:

package misejemplos.ahorcado;
import android.os.Bundle;
import android.preference.PreferenceActivity;

public class Configuracion extends PreferenceActivity
{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.settings);
}

}

En esta clase, redefinimos el método onCreate, que lo que hará será leer el fichero settings.xml como base para crear la nueva Activity.

¿Qué nos queda por hacer?. La respuesta es registrar la nueva Activity en el fichero: Proyecto Ahorcado -> AndroidManifest.xml, que quedará así (puedes ver en negrita el código añadido):

<?xml version=”1.0″ encoding=”utf-8″?>
<manifest xmlns:android=”http://schemas.android.com/apk/res/android&#8221;
package=”misejemplos.ahorcado”
android:versionCode=”1″
android:versionName=”1.0″>
<application android:icon=”@drawable/icon” android:label=”@string/app_name”>
<activity android:name=”.Ahorcado”
android:label=”@string/app_name”>
<intent-filter>
<action android:name=”android.intent.action.MAIN” />
<category android:name=”android.intent.category.LAUNCHER” />
</intent-filter>
</activity>
<activity android:name=”.Configuracion”
android:label=”@string/titulo_config” >
</activity>

</application>
<uses-sdk android:minSdkVersion=”8″ />

</manifest>

Si ahora ejecutamos el proyecto (seleccionamos el proyecto Ahorcado con el botón derecho y luego seleccionamos Run As -> Android Application), veremos que, después de pulsar el botón MENU y de que aparezca el menú Configuración, ahora podemos hacer clic en él. Aparecerá la nueva Activity así como la hemos definido:

tutorial castellano android. menu configuracion

Hasta el próximo post.

Acerca de Isildur Fuentes

Apasionado de las buenas historias y aikidoka de la tierra.

Publicado el diciembre 13, 2010 en Android, Divulgación, EDIB, Programación y etiquetado en , , , . Guarda el enlace permanente. 24 comentarios.

  1. Buen tutorial para aquellos que empiezan, deseando ver una nueva entrega.

  2. A raultm, muchas gracias por el aporte. Nuestra intención es seguir con nuevas entregas.

    Un saludo.

  3. Impresionante, enhorabuena por la web, las explicaciones y el tiempo invertido que gente como yo, que hemos empezado hace poco perdamos el miedo poco a poco a este magnífico lenguaje/S.O.

    Saludos y enhorabuena.

    • Akru96, muchas gracias por el comentario. Llevo unos días ocioso por las fiestas🙂, pero dentro de poco seguiré escribiendo.

      Saludos.

  4. Muy bien explicado el tutorial, lo he seguido todo y me ha funcionado bien, solo he encontrado un pequeño error, al menos en mi eclipse.

    En la clase Ahorcado, en la parte donde tengo puesto <—- Aquí
    en mi eclipse me decia que no existia menu_1

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case R.id.menu_1: //<—- Aquí
    startActivity(new Intent(this, Configuracion.class));
    return true;

    }
    return false;
    }

    lo he modificado por
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case R.id.config: //<—- Aquí
    startActivity(new Intent(this, Configuracion.class));
    return true;

    }
    return false;
    }

    y ya me funciona correctamente.

    Gracias por la información

    • Hola Alex. Quiero agradecerte tu comentario y confirmarte que, tal y como indicas, en mis pruebas olvidé actualizar el código que te generó el error sobre el botón del menú de configuración. Ya he actualizado el post.

      De nuevo, muchas gracias por tu dedicación y por ayudarnos.

      Un saludo.

  5. David Muñoz Camarero

    genial tutorial!!! hay poco material en español sobre android y esta tuto va genial.
    un saludo, y gracias por vuestro esfuerzo

    • Isidro Fuentes Hermoso

      ¡Muchas gracias David por tu comentario!.

      En breve aparecerá un nuevo post sobre Android.

      Saludos.

  6. Donde estan los demas tutoriales, se salta del:

    Android. Juego del Ahorcado (I) al (IV)…

    Donde estan los intermedios (II) y (III) ????

  7. Jejeje, se me olvido, disculpen.

    Gracias por la informacion, muy buena y entendible.

    Por los que somos principiantes y no queremos quedarnos atras.
    😀

  8. ¡¡¡ DE LUJO !!!

  9. Hola a todos, muy buen post

    He estado depurando el código porque no me sale el menú que debería salir al tocar configuración.

    Y resulta ser que cuando salgo de la funcion onCreateOptionsMenu() que devuelve true me sale el siguiente error en el deputador.

    El fichero se llama activity.class.

    Pone source not found, al principio me decía que buscara la ruta dentro del sdk android.jar y fue lo que hice, pero ahora me pone que la fuente seleccionada no contiene Activity.class.

    // Compiled from Activity.java (version 1.5 : 49.0, super bit)
    public class android.app.Activity extends android.view.ContextThemeWrapper implements android.view.LayoutInflater$Factory, android.view.Window$Callback, android.view.KeyEvent$Callback, android.view.View$OnCreateContextMenuListener, android.content.ComponentCallbacks {
    …..

    alguien sabe a que se debe.

    Muchas gracias y perdonen

  10. Hola,

    Estupendo post, lo estoy siguiende al pie de la letra y estoy aprendiendo mas que con muchos manuales de los que me he bajado.

    Muchas Felicidades y sigue asi.

    Pero tengo un pequeño problema, lo he seguido todo paso a paso y el codigo no me da ningun error, pero cuando clicko en el boton de configuracion no me pasa de pantalla y lo unico que hace es esconderse otra vez sin mostrarme el menú de opciones.

    A que puede ser debido? llevo rato repasando el codigo pero no ha manera de resolverlo.

    Agradeceria mucho tu ayuda.

    Felicidades por los posts

    • Isidro Fuentes Hermoso

      Hola Artur.

      ¡Muchas gracias por tu comentario!. Espero que este blog siga siendo de tu interés.

      Respecto al problema que comentas, el SDK de Android a veces hace cosas como esta. Algunos compañeros han tenido problemas similares de código que es correcto y no funciona. Te paso algunas sugerencias:

      – Si has copiado el código fuente directamente del post y has hecho “paste”, a veces los juegos de caracteres os hacen malas pasadas. Te recomiendo que mejor lo copies escribiéndolo directamente.
      – Esta pantalla de configuración es una “activity”. Te recomiendo que verifiques que está creada como dice el post, y la escribas (si no lo has hecho ya).
      – A mí me pasó algo parecido una vez y me volví loco hasta que lo deje estar. Cuando reinicié tanto el emulador y Eclipse, luego funcionó.
      – Haz copia de seguridad del proyecto, y cópiala en otra ruta. Utiliza, dentro de Eclipse, la utilidad “Menú Project -> Clean”.

      Espero que te sirvan de ayuda.
      Un saludo.

      Isidro.

  11. FUENTES ERES GENIAL MEN CON ESTO TE HAS LUCIDO MEN

  12. HOLA FUENTES CREES QUE ME PUEDES REGALAR TU CORREO NECESITO QUE ME AYUDES CON UN PROYECTO SIMILAR AL DEL AHORACADO PERO NO SE COMO HACERLO

  13. Buenas Isidro,

    Te felicito por tus tutoriales, me estan ayudando mucho a empezar con esto del android.
    Muchas gracias por audarnos.

    Un saludo.

  14. public class Configuracion extends PreferenceActivity
    {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.settings);<——-error aqui
    }

    }

    me da error en R.xml.settigns me dice que el campo xml no es un campo como puedo resolver esto! por favor

A %d blogueros les gusta esto: