Android: ¿La mejor manera de permitir que el usuario acceda a la actividad de Preferencia?

Tengo una aplicación en desarrollo y tengo una actividad de Preferencias que permite al usuario elegir la configuración de la aplicación.

Necesito ayuda para elegir cómo el usuario accederá a la actividad de preferencia. Algunos tutoriales en realidad tienen un botón en la actividad principal etiquetado, por ejemplo, "preferencias" que permitiría al usuario visitar esa actividad.

Otros (como lo tengo actualmente) solo confían en que el usuario haga clic en el botón de menú en su teléfono. Leí que algunos teléfonos ya no tienen un botón de menú, y el equipo de Android está tratando de deshacerse de los requisitos de un botón de navegación físico.

Así que estoy un poco confundido, ¿cuál es el consenso general sobre este tema? Gracias.

EDITAR: Aquí está mi código de creación de menú actual

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        menu.add(Menu.NONE, 0, 0, "Settings");
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case 0:
            startActivity(new Intent(this, Preferences.class));
            return true;
        }
        return false;
    }

preguntado el 28 de julio de 12 a las 17:07

4 Respuestas

Utilice el enfoque de "botón de menú". Normalmente, en inglés, el botón debería llamarse "Configuración", no "Preferencias", aunque gestione las Preferencias. Tonto, lo sé.

Con respecto a los teléfonos sin botones de menú:

Los únicos teléfonos que no los tienen ejecutan Android 4.0 o superior. Siempre que su objetivo sea Android 3.0 o superior en la compilación de su proyecto y cree correctamente el elemento del menú (proporcionaré un fragmento si necesita saber cómo), Android detectará que no hay un botón de menú de hardware y agregará un "Desbordamiento" menú a la barra de acción.

Editar: Aquí está el fragmento:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuItem buttonSettings = menu.add("Settings"); // This is a hardcoded string. When you get around to it, switch it to a localized String resource.
    buttonSettings.setIcon(R.drawable.ic_settings); // I have a custom icon for this. You can use the one in android.R.drawable, but I don't know its name right now.
    buttonSettings.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER); // This forces it to go in the overflow menu, which is preferred.
    buttonSettings.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {

        public boolean onMenuItemClick(MenuItem item) {
            Intent settingsIntent = new Intent(YourActivity.this, Preferences.class); // Change YourActivity to.. well, your activity. Change Preferences to the name of your Settings activity.
            YourActivity.this.startActivity(settingsIntent);
            return false; // I honestly don't know why this should return false, but every example I've seen has it do so. So I'd leave it in.
        }
    });
return true;
}

El menú de desbordamiento se parece a tres puntos y es como una opción "más..." para la barra de acción. Las Directrices de diseño de Android dicen que siempre debe poner su opción de Configuración en el menú de desbordamiento.

Espero haberte aclarado, cualquier otra cosa no dudes en preguntar.

Respondido 28 Jul 12, 18:07

Ya veo. Bueno, estoy probando en mi teléfono muy antiguo (Android 2.2). Así que tengo el botón de menú para que aparezca el menú de opciones. Solo necesito asegurarme de que en Android 3.0+, mi opción de configuración no desaparezca, ¿verdad? Se agregará automáticamente a la barra de acción donde aparecen los tres puntos, con suerte. Si tiene el fragmento de código a mano, me encantaría verlo. Gracias. - capcom

Intenta ejecutarlo en un emulador 4.0. No estoy en casa en este momento, así que me tomará un minuto obtener el fragmento. Si quieres, puedes enviármelo y puedo probarlo en mi teléfono 4.1. - Steven Schön

Actualicé mi respuesta con el fragmento. - Steven Schön

Gracias, lo estoy probando en el emulador a ver que pasa. Te lo haré saber, no hay prisa con el fragmento. - capcom

Agregué el fragmento de todos modos. Además, consejo profesional: si un dispositivo tiene 4.0 y un botón de menú de hardware, ocultará el elemento de desbordamiento en la barra de acción y abrirá el menú de desbordamiento cuando presionen el botón de menú. - Steven Schön

Gracias por la ayuda de todos, especialmente de Steven, he aprendido lo siguiente:

  • Para Android 3.0+, una forma eficiente de acceder a mi actividad de Preferencia sería implementando la barra de acción
  • La barra de acción se puede agregar cambiando el tema a Theme.Holo, que está disponible en las plataformas 3.0+
  • Como tengo un teléfono con 2.2, no se encontró el tema Holo cuando lo configuré en el archivo de manifiesto, esto se debió a que mi objetivo de compilación era 2.2
  • Inicialmente cambié minSdkVersion a 11 para que el tema funcionara, pero eso significaba que no podría probarlo en mi teléfono y nadie con una versión de Android inferior a 3.0 podría usar mi aplicación si quería
  • La forma real de hacerlo es ir a Proyecto> Preferencias> Android y establecer el objetivo de compilación en la última versión de Android (de esta manera, los teléfonos con versiones de SO más altas pueden beneficiarse de los cambios relacionados con el tema más reciente, mientras que las versiones anteriores no se ven afectadas)
  • Una cosa a tener en cuenta al establecer un objetivo de compilación más alto es la compatibilidad de las clases que usa. Es posible que algunas clases solo funcionen en las versiones superiores de Android y, por lo tanto, podrían provocar que su aplicación se bloquee en las versiones inferiores.

Respondido 30 Jul 12, 00:07

Te sugiero que hagas ambas cosas (esto es lo que hago yo). Tienes una configuración virtual button se muestra en la pantalla y cuando se hace clic en eso, aparece la pantalla de configuración. Y usted tiene la opción, cuando el physical button se hace clic, aparece la pantalla de configuración.

Respondido 28 Jul 12, 18:07

También me gusta esa idea, también podría hacerlo lo más explícito posible para el usuario para maximizar su experiencia. - capcom

Sí, esto también debería hacer que su UI y UX de su aplicación sean más intuitivos y que produzcan usuarios felices. :D - lucas taylor

Algunos que son más inteligentes (y estéticamente más refinados) que yo comentan ajustes en la guía de diseño de Android.

Mi principio de diseño de interfaz de usuario genérico es:

  1. Se debe acceder a algo que hace todo el tiempo con los controles en pantalla (área de contenido o acción de la barra de acción).
  2. Se debe acceder a algo que hace una vez al día desde el nivel superior de su menú (o en pantalla solo en la pantalla de inicio).
  3. Algo que rara vez hace (como cambiar las preferencias del usuario) puede enterrarse tan profundamente en la jerarquía del menú como desee. :-)

En la práctica, normalmente espero que la configuración esté en el primer nivel de desbordamiento de la actividad de inicio.

Respondido 28 Jul 12, 19:07

Oye, me gusta ese concepto. Creo que seguiré esas pautas a partir de ahora. No estoy muy familiarizado con la barra de acción simplemente porque solo tengo un teléfono con Android 2.2. Voy a empezar a experimentar con él en un simulador. Gracias. - capcom

Considere mirar el ejemplo de ActionBarCompat y ActionBarSherlock. Es genial cuando puedes tener una experiencia de usuario unificada que cubre las últimas novedades y lleva a los usuarios heredados al viaje. - Sparky

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.