¿Cómo agregar el indicador de "menú" junto al icono de la aplicación de Barra de Acción?
Por lo menos, las aplicaciones de Gmail y Youtube para Android utilizan un menú lateral ( cajón de navegación ?) Que se abre al pasar, o haciendo clic en el icono de la aplicación (botón Inicio):
- Gaveta de navegación: agrega encabezados en listview
- Android: Cajón de navegación en múltiples actividades
- Elementos del menú de NavigationView con el contador a la derecha
- Barra de navegación translúcida Lollipop (fitsSystemWindows = "true")
- Cómo abrir diferentes actividades al hacer clic en los elementos del cajón de navegación?
¿Está el indicador / icono de menú en la captura de pantalla encima de una parte ya hecha del SDK de Android? (¿O un icono personalizado que Google usa en sus aplicaciones?) En cualquier caso, ¿cuál es la manera más fácil de que su botón de inicio se vea así , es decir, como abre un menú?
( targetSdkVersion
18; minSdkVersion
14)
Resolución
Finalmente lo consiguió trabajando . Lo que faltaba para mí era 1) el icono real y 2) la llamada diferida a syncState()
en el ActionBarDrawerToggle
.
- NavigationDrawer con Actividades vs. NavigationDrawer con Fragments
- Hacer fragmento que se puede hacer clic al abrir el cajón de navegación
- No se puede resolver el método getActivity ()
- Cajón de navegación Elementos que no registran el evento de clic
- Uso de fragmentos del cajón de navegación para superponer la actividad
- Cómo actualizar la lista del cajón de navegación tan pronto como su abrir / cerrar en Android
- ¿Cómo crear un cajón de navegación personalizado que abre ListView junto al cajón onitemclick?
- Androide. ¿Cómo puedo deslizar NavigationDrawer de la biblioteca de pruebas Espresso?
Para crear una implementación / mirada similar en su aplicación, debe usar ActionBarDrawerToggle
y configurar su icono personalizado como indicador junto al botón Inicio de ActionBar. Por ejemplo :
import android.app.ActionBar; import android.support.v4.app.ActionBarDrawerToggle; import android.support.v4.widget.DrawerLayout; private void setUpDrawerToggle(){ ActionBar actionBar = getActionBar(); actionBar.setDisplayHomeAsUpEnabled(true); actionBar.setHomeButtonEnabled(true); // ActionBarDrawerToggle ties together the the proper interactions // between the navigation drawer and the action bar app icon. mDrawerToggle = new ActionBarDrawerToggle( this, /* host Activity */ mDrawerLayout, /* DrawerLayout object */ R.drawable.ic_drawer, /* nav drawer image to replace 'Up' caret */ R.string.navigation_drawer_open, /* "open drawer" description for accessibility */ R.string.navigation_drawer_close /* "close drawer" description for accessibility */ ) { @Override public void onDrawerClosed(View drawerView) { invalidateOptionsMenu(); // calls onPrepareOptionsMenu() } @Override public void onDrawerOpened(View drawerView) { invalidateOptionsMenu(); // calls onPrepareOptionsMenu() } }; // Defer code dependent on restoration of previous instance state. // NB: required for the drawer indicator to show up! mDrawerLayout.post(new Runnable() { @Override public void run() { mDrawerToggle.syncState(); } }); mDrawerLayout.setDrawerListener(mDrawerToggle); }
Donde R.drawable.ic_drawer
es en realidad el icono a usar como indicador. Lo puedes encontrar en Android Asset Studio ; Consulte Indicador del cajón de navegación .
Referencias
- ActionBarDrawerToggle
- Creación de un cajón de navegación
Android-Developer y HpTerm me ayudaron en la correcta
- Señalar esto es en realidad NavigationDrawer específicos (que ya estaba utilizando como en el ejemplo de Google)
- Diciendo dónde encontrar el ícono
ic_drawer.png
(→ Android Asset Studio )
Ahora, por desgracia, crear ActionBarDrawerToggle como a continuación parece no ser suficiente. Al menos en mi Nexus 7 (API 18) dispositivo de prueba.
drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.drawable.ic_navigation_drawer, R.string.side_menu_open, R.string.side_menu_closed) { // ... };
Solución parcial (nivel API 18+)
Encontré una manera de hacer que el indicador aparezca sin embargo: setHomeAsUpIndicator()
. La desventaja: este método se añadió en el nivel 18 de la API.
@Override protected void onCreate(Bundle savedInstanceState) { // ... getActionBar().setDisplayHomeAsUpEnabled(true); // also required if (Build.VERSION.SDK_INT >= 18) { getActionBar().setHomeAsUpIndicator( getResources().getDrawable(R.drawable.ic_navigation_drawer)); } }
Así que ahora la pregunta sigue siendo: ¿Cómo hacer que esto funcione (en mi caso) para los niveles API 14 a 17?
ic_drawer
en un dispositivo 4.1.2 (API 16) que el ícono ic_drawer
no aparece. Con setDisplayHomeAsUpEnabled(true)
consigo el icono normal de "inicio" (pequeña flecha apuntando a la izquierda) y sin ella, el espacio que queda en el icono de mi aplicación permanece en blanco.
Solución final
Lo conseguí trabajando usando la versión editada de la respuesta de Android-Developer .
Curiosamente, lo que faltaba en mi código de inicialización ActionBarDrawerToggle era:
// Defer code dependent on restoration of previous instance state. drawerLayout.post(new Runnable() { @Override public void run() { mDrawerToggle.syncState(); } });
Con eso incluido, no se necesita llamar a setHomeAsUpIndicator()
.
La palabra clave aquí es NavigationDrawer
; Hay un ejemplo completo de código de trabajo en el sitio de desarrolladores de Android.
LEA EL FIN DEL ENLACE DADO : Abrir y cerrar con el icono de la aplicación
El siguiente código se copia desde allí
public class MainActivity extends Activity { private DrawerLayout mDrawerLayout; private ActionBarDrawerToggle mDrawerToggle; ... public void onCreate(Bundle savedInstanceState) { ... mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); mDrawerToggle = new ActionBarDrawerToggle( this, /* host Activity */ mDrawerLayout, /* DrawerLayout object */ R.drawable.ic_drawer, /* nav drawer icon to replace 'Up' caret */ R.string.drawer_open, /* "open drawer" description */ R.string.drawer_close /* "close drawer" description */ ) { /** Called when a drawer has settled in a completely closed state. */ public void onDrawerClosed(View view) { getActionBar().setTitle(mTitle); } /** Called when a drawer has settled in a completely open state. */ public void onDrawerOpened(View drawerView) { getActionBar().setTitle(mDrawerTitle); } }; // Set the drawer toggle as the DrawerListener mDrawerLayout.setDrawerListener(mDrawerToggle); getActionBar().setDisplayHomeAsUpEnabled(true); getActionBar().setHomeButtonEnabled(true); } @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); // Sync the toggle state after onRestoreInstanceState has occurred. mDrawerToggle.syncState(); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); mDrawerToggle.onConfigurationChanged(newConfig); } @Override public boolean onOptionsItemSelected(MenuItem item) { // Pass the event to ActionBarDrawerToggle, if it returns // true, then it has handled the app icon touch event if (mDrawerToggle.onOptionsItemSelected(item)) { return true; } // Handle your other action bar items... return super.onOptionsItemSelected(item); } ... }
Algunos archivos están disponibles como descarga y las pequeñas 3 líneas con el efecto de animación se ejemplifican completamente.
Tienes que copiar estos archivos en la carpeta correspondiente. Dependiendo del tema que uses, oscuro o claro tienes un conjunto diferente de iconos.
En mi caso simplemente copié el drawer_shadow.9.png
y ic_drawer.png
en la carpeta ic_drawer.png
y seguí el ejemplo y todo funciona bien.
Los iconos están disponibles en el vínculo que proporcioné, pero NO están en el "Paquete de Iconos de la Barra de Acción", están en la aplicación de ejemplo en las carpetas res / drawable correspondientes .
- ¿Cómo mantener un alerta de diálogo abierto después de que el botón onclick se dispare?
- Carga de un archivo a través de SSL con Client Side Certificate y HttpsURLConnection de Android