Toggle DrawerLayout con solo título (NO Icono de la aplicación)?
Tengo una actividad con un DrawerLayout
. Puedo abrir el cajón de dos maneras diferentes … deslizando desde el área izquierda de la pantalla hacia la derecha y haciendo clic en el título de la aplicación. No se muestra un icono de aplicación, solo un título. He implementado exactamente lo recomendado por Google aquí: Creación de un cajón de navegación: Abrir y cerrar con el icono de la aplicación
Todo es funcional hasta abrir y cerrar el cajón. Sin embargo, no muestra el icono estándar de DrawerLayout
que se supone que debe utilizarse. En su lugar, obtener el regular hasta caret (parece un menos de signo).
- Configuración del icono de navegación en Android ActionBar
- Barra de herramientas que no aparece en los dispositivos pre lollipop
- El botón dentro de DrawerLayout no se puede hacer clic
- Por qué no puedo bloquear DrawerLayout con gravedad de diseño
- Cómo crear DrawerLayout programaticamente
Tan pronto como agrego el icono de la aplicación de nuevo a la ActionBar
comienza a funcionar como se esperaba. El icono de diseño del cajón se muestra y se anima cuando se abre o cierra el cajón. He intentado quitar el icono de la aplicación tanto en mi archivo XML de estilos como de forma programática.
¿Hay una manera de conseguir el icono de DrawerLayout
trabaja SIN el icono de la aplicación ???
ACTUALIZACIÓN: He encontrado un trabajo alrededor, pero es un hack más que una solución. Simplemente creé un PNG 1×1 píxel transparente (blank.png) y lo configuré como mi icono de aplicación en mi archivo styles.xml. A continuación se muestra todo el código relativo:
Styles.xml
<style name="MyCustomTheme" parent="android:Theme.Holo.Light.DarkActionBar"> <item name="android:actionBarStyle">@style/MyCustomActionBar</item> <item name="android:icon">@drawable/blank</item> </style> <style name="MyCustomActionBar" parent="@android:style/Widget.Holo.ActionBar"> <item name="android:displayOptions">showHome|showTitle|homeAsUp</item> </style>
MainActivity -> onCreate ()
this.navDrawerToggle = new ActionBarDrawerToggle ( this, this.navDrawerLayout, R.drawable.icon_nav_drawer, R.string.nav_drawer_open, R.string.nav_drawer_closed ) { public void onDrawerClosed(View view) {} public void onDrawerOpened(View drawerView) {} };
MainActivity -> onPostCreate ()
super.onPostCreate(savedInstanceState); this.navDrawerToggle.syncState();
MainActivity -> onResume ()
this.navDrawer.setOnItemClickListener(new DrawerItemClickListener()); this.navDrawerLayout.setDrawerListener(this.navDrawerToggle);
MainActivity -> onPause ()
this.navDrawer.setOnItemClickListener(null); this.navDrawerLayout.setDrawerListener(null);
MainActivity -> onConfigurationChanged (Configuración newConfig)
super.onConfigurationChanged(newConfig); navDrawerToggle.onConfigurationChanged(newConfig);
MainActivity -> onOptionsItemSelected (elemento MenuItem)
if (this.navDrawerToggle.onOptionsItemSelected(item)) {return true;} else { // A bunch of item click handling happens here... return true; }
- Android.support.v7 Toolbar & DrawerLayout- cómo ocultar icono de Hamburger
- Cómo configurar el icono de Disposición de cajones en el lado derecho de la pantalla del dispositivo?
- Necesita hacer la vista de lista en el centro verticalmente para Disposición de cajones en Android
- El método setDrawerListener está obsoleto
- Android: ¿Cómo puedo evitar que DrawerLayout pase eventos táctiles a la vista subyacente
- Establecer LayoutParams de ListView cuando se utiliza DrawerLayout con fragmentos
- Vertical DrawerLayout o SlidingPaneLayout
- El artículo de DrawerLayout hace clic - ¿Cuándo es el momento adecuado para reemplazar el fragmento?
getActionBar().setIcon(android.R.color.transparent);
Esto funcionó para mí …..;)
Tenía curiosidad por esto así que lo probé con la muestra para el DrawerLayout y funcionó bien. También, parece que usted tiene que utilizar su propio icono del cajón drawable, se recomienda de todos modos. Puede descargar los activos predeterminados de este sitio Creación de un cajón de navegación y colocarlos en su respectiva carpeta de recursos dibujable.
Esto es lo que funcionó para mí:
ActionBar actionBar = getActionBar(); // Let's get rid of the app icon here actionBar.setIcon(null); actionBar.setTitle("App Name"); // Setting these 3 options allows us to show the title as well as a "Home" elements // "Home" elements include the Up and/or Drawer icon. The DISPLAY_HOME_AS_UP will enable // and show the Drawer icon, we'll be "replacing" the "up" button with the drawer icon below actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_TITLE | ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_HOME_AS_UP); // Get a reference of the DrawerLayout DrawerLayout drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); drawerLayout.setDrawerListener(drawerToggle); // Setting ActionBarDrawerToggle will allow you to set the drawables for the drawer // (this will also give you the nice/smooth animation) as well as allow you to do some // other things depending on the events: onDrawerClosed & onDrawerOpened. ActionBarDrawerToggle drawerToggle = new ActionBarDrawerToggle( this, /* host Activity */ drawerLayout, /* DrawerLayout object */ R.drawable.ic_drawer, /* nav drawer image to replace 'Up' caret */ R.string.drawer_open, /* "open drawer" description for accessibility */ R.string.drawer_closed /* "close drawer" description for accessibility */ ) { public void onDrawerClosed(View view) { actionBar.setTitle("Closed..."); invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() } public void onDrawerOpened(View drawerView) { actionBar.setTitle("Open..."); invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() } }; // Set a listener to be notified of drawer events. drawerLayout.setDrawerListener(drawerToggle);
ACTUALIZACIÓN: Parece que el android: displayOptions en el estilo de ActionBar no están siendo contabilizados. En su lugar, utilice actionBar.setDisplayOptions (int options).
Después de ajustar el interruptor del cajón, debe llamar al siguiente método:
mDrawerToggle.syncState();
Por lo que su código se vería así:
mDrawerToggle = new ActionBarDrawerToggle( this, /* host Activity */ mDrawerLayout, /* DrawerLayout object */ R.drawable.ic_drawer, /* nav drawer image to replace 'Up' caret */ R.string.drawer_open, /* "open drawer" description for accessibility */ R.string.drawer_close /* "close drawer" description for accessibility */ ) { public void onDrawerClosed(View view) { actionBar.setTitle(mTitle); invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() } public void onDrawerOpened(View drawerView) { actionBar.setTitle("Preview Mode"); invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() } }; mDrawerToggle.syncState(); mDrawerLayout.setDrawerListener(mDrawerToggle);