6 votes

Basculer le DrawerLayout avec le titre seulement (PAS d'icône d'application) ?

J'ai une activité avec un DrawerLayout . Je peux ouvrir le tiroir de deux façons différentes... en glissant de la zone gauche de l'écran vers la droite et en cliquant sur le titre de l'application. I NE PAS avoir une icône d'application affichée, seulement un titre. J'ai implémenté ceci exactement comme recommandé par Google ici : Création d'un tiroir de navigation : Ouvrir et fermer avec l'icône de l'application

Tout est fonctionnel en ce qui concerne l'ouverture et la fermeture du tiroir lui-même. Cependant, il n'affiche pas la norme DrawerLayout qui est censé être utilisé. Au lieu de cela, j'obtiens le signe d'insertion normal (qui ressemble à un signe moins que).

Dès que je réintroduis l'icône de l'application dans le fichier ActionBar il commence à fonctionner comme prévu. L'icône de la disposition du tiroir s'affiche et s'anime lorsque le tiroir est ouvert ou fermé. J'ai essayé de supprimer l'icône de l'application à la fois dans mon fichier XML de styles et de manière programmatique.

Y a-t-il un moyen d'obtenir le DrawerLayout l'icône fonctionne SANS l'icône de l'application ? ??

UPDATE : J'ai trouvé un moyen de contourner le problème, mais c'est plus une astuce qu'une solution. J'ai simplement créé un PNG transparent de 1x1 pixel (blank.png) et l'ai défini comme icône de mon application dans mon fichier styles.xml. Ci-dessous le code relatif :

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();

Activité principale -> onResume()

this.navDrawer.setOnItemClickListener(new DrawerItemClickListener());
this.navDrawerLayout.setDrawerListener(this.navDrawerToggle);

MainActivity -> onPause()

this.navDrawer.setOnItemClickListener(null);
this.navDrawerLayout.setDrawerListener(null);

Activité principale -> onConfigurationChanged(Configuration newConfig)

super.onConfigurationChanged(newConfig);
navDrawerToggle.onConfigurationChanged(newConfig);

Activité principale -> onOptionsItemSelected(MenuItem item)

if (this.navDrawerToggle.onOptionsItemSelected(item)) {return true;}
else
{
    // A bunch of item click handling happens here...

    return true;
}

13voto

velazcod Points 759

J'étais curieux de savoir ce qu'il en était, j'ai donc essayé avec l'échantillon pour le DrawerLayout et cela a bien fonctionné. De plus, il semble que vous deviez utiliser votre propre dessinateur d'icône de tiroir, mais c'est recommandé de toute façon. Vous pouvez télécharger les actifs par défaut sur ce site Création d'un tiroir de navigation et les placer dans leur dossier respectif de ressources dessinables.

Voici ce qui a marché pour moi :

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);

UPDATE : Il semble que les options Android:displayOptions du style ActionBar ne soient pas prises en compte. Utilisez plutôt actionBar.setDisplayOptions(int options).

0voto

j2emanue Points 3456

Après avoir défini la bascule du tiroir, vous devez appeler la méthode suivante :

 mDrawerToggle.syncState();

donc votre code ressemblerait à ceci :

 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);

0voto

karan Points 31

getActionBar().setIcon(android.R.color.transparent);

Cela a marché pour moi..... ;)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X