Barre d'outils Navigation Icône Hamburger manquante

je suis à la recherche d'un moyen d'afficher le blanc de l'icône hamburger en utilisant le tiroir / Dessinertoggle et utiliser l'icône par défaut inclus dans Android enter image description here

en positionnant getSupportActionBar().setDisplayHomeAsUpEnabled(true); il affiche la flèche arrière mais pas le hambuerger. Autre poste sur Stackoverflow (comme ce ou ce ) utilisez le DrawerLayout ou un drawable personnalisé. Je ne trouve pas le vecteur ou png pour l'icône hamburger sur L'Android source.

savez-vous comment je peux trouver l'icône originale hamburger dans android/bibliothèque de soutien? (ou comment l'afficher)

Note: Le Vecteur et png peuvent être trouvés sur google.com/design sur Internet: http://www.google.com/design/spec/resources/sticker-sheets-icons.html#

dans mon activité

mToolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(mToolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);

mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Log.d(LOG_TAG, "navigation clicked");
    }
});

fichier de mise en page

<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:minHeight="?attr/actionBarSize"
    android:background="?attr/colorPrimary"
    app:theme="@style/ThemeOverlay.AppCompat.ActionBar"/>

Styles.xml

<!-- Base application theme. -->
<style name="Theme.AppTheme" parent="Theme.AppCompat.Light.NoActionBar">


    <item name="colorPrimary">@color/primaryDef</item>
    <item name="colorPrimaryDark">@color/primaryDarkDef</item>
    <item name="colorAccent">@color/primaryDef</item>

    <!-- Remove the actionbar shadow-->
    <item name="android:windowContentOverlay">@null</item>
</style>
55
demandé sur Community 2015-01-21 19:08:54

15 réponses

si vous voulez utiliser le même tiroir que lollipop, laissez-moi vous dire que ce n'est pas une image statique. Cette image est dessinée en temps réel par une classe appelée DrawerArrowDrawableToggle . Il n'y a donc pas d'icône" hamburger " pour cela.

cependant si vous voulez l'icône hamburger sans animation vous pouvez le trouver ici:

http://shreyasachar.com/AndroidAssetStudio

Vous pouvez également utiliser http://www.google.com/design/spec/resources/sticker-sheets-icons.html#sticker-sheets-icons-components et télécharger le pack. L'icône de navigation porte le nom ic_menu et se trouve dans le dossier navigation :

https://github.com/google/material-design-icons/blob/master/navigation/drawable-xxxhdpi/ic_menu_grey600_48dp.png

enter image description here

32
répondu Pedro Oliveira 2017-03-27 05:31:48

Pour avoir une animation hamburger icône vous devez utiliser DrawerLayout avec ActionBarDrawerToggle et activer l'icône de la ActionBar et pour le ActionBarDrawerToggle .

exemple:

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
DrawerLayout drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle mDrawerToggle;

setSupportActionBar(toolbar);
final ActionBar actionBar = getSupportActionBar();

if (actionBar != null)
{
   actionBar.setDisplayHomeAsUpEnabled(true);
   mDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.hello_world, R.string.hello_world)
   {

      public void onDrawerClosed(View view)
      {
         supportInvalidateOptionsMenu();
         //drawerOpened = false;
      }

      public void onDrawerOpened(View drawerView)
      {
         supportInvalidateOptionsMenu();
         //drawerOpened = true;
      }
   };
   mDrawerToggle.setDrawerIndicatorEnabled(true);
   drawerLayout.setDrawerListener(mDrawerToggle);
   mDrawerToggle.syncState();
}

vous devez aussi ajouter ces méthodes à votre activité:

@Override
protected void onPostCreate(Bundle savedInstanceState)
{
    super.onPostCreate(savedInstanceState);
    mDrawerToggle.syncState();
}

@Override
public void onConfigurationChanged(Configuration newConfig)
{
    super.onConfigurationChanged(newConfig);
    mDrawerToggle.onConfigurationChanged(newConfig);
}
28
répondu mohax 2017-01-20 01:54:54

j'ai eu le même problème et j'ai trouvé la solution la plus simple ici:

appcompatv7-v21-navigation-tiroir-pas-montrant-hamburger-icône

Tout ce que j'avais à faire était d'appeler:

mDrawerToggle.syncState();
8
répondu Kacper Wolkowski 2017-05-23 11:54:53

pour que vous avez juste besoin d'écrire à quelques lignes

   DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
   ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
   drawer.setDrawerListener(toggle);
   toggle.setDrawerIndicatorEnabled(true);
   toggle.syncState();

bascule.setDrawerIndicatorEnabled(true); si c'est faux le faire ou de supprimer cette ligne

8
répondu Vivek Barai 2017-07-29 05:47:02

vous pouvez essayer de faire votre propre dessinable pour l'icône de hamburger comme ceci.

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    android:viewportHeight="24.0"
    android:viewportWidth="24.0">
    <path
        android:fillColor="#ffffff"
        android:pathData="M3,18h18v-2L3,16v2zM3,13h18v-2L3,11v2zM3,6v2h18L21,6L3,6z" />
</vector>

puis dans votre fragment / activité,

getSupportActionBar().setHomeAsUpIndicator(R.drawable.as_above);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

pour les autres tirages, cela pourrait aider: https://github.com/google/material-design-icons/blob/master/navigation/drawable-anydpi-v21/

7
répondu BBrain 2017-04-05 18:12:26

Voici la solution la plus simple qui a fonctionné pour moi.

le ActionBarDrawerToggle a deux types de constructeurs. L'un d'eux prend barre d'outils comme paramètre. Utilisez ce (deuxième ci-dessous) pour obtenir le animé hamburger.

ActionBarDrawerToggle(this, mDrawerLayout, R.string.content_desc_drawer_open, 
R.string.content_desc_drawer_close);

ActionBarDrawerToggle(this, mDrawerLayout, toolbar, R.string.content_desc_drawer_open, 
R.string.content_desc_drawer_close);`  //use this constructor
6
répondu Thupten 2017-01-26 15:52:51
    Toolbar mToolbar = (Toolbar) findViewById(R.id.toolbar);
    mToolbar.setTitle("title");
    setSupportActionBar(mToolbar);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    getSupportActionBar().setHomeButtonEnabled(true);
    getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_list);
5
répondu Tarun Voora 2016-07-28 12:17:35

j'ai eu le même problème. Obtenir le ToolBar et puis Définir l'icône de Navigation

final android.support.v7.widget.Toolbar toolbar = (android.support.v7.widget.Toolbar) findViewById(R.id.toolbar);
toolbar.setNavigationIcon(R.drawable.blablabla);
4
répondu Misho Zhghenti 2015-12-07 12:26:46

ok pour masquer la flèche de retour d'utilisation

getSupportActionBar().setDisplayHomeAsUpEnabled(false);
getSupportActionBar().setHomeButtonEnabled(false);

puis trouver l'icône hamburger dans le web - > hamburger

et enfin, mettez ce dessin dans votre projet avec la méthode de la barre d'action:

getSupportActionBar().setLogo(R.drawable.hamburger_icon);
3
répondu Sniper 2015-01-21 16:36:46

peut-être que vous pouvez essayer ceci, mais vous perdrez l'animation entre la flèche et l'icône de hamburger

@Override
protected void onCreate(Bundle arg0) {
    super.onCreate(arg0);
    super.setContentView(R.layout.activity_menu_drawer_left);

_drawerToggle = new ActionBarDrawerToggle(this, _drawerLayout, R.string.drawer_opened, R.string.drawer_closed) {
        public void onDrawerOpened(View drawerView) {
            super.onDrawerOpened(drawerView);
            changeDrawerIconOnDrawerClick(R.drawable.abc_ic_ab_back_mtrl_am_alpha);
        }

        /** Called when a drawer has settled in a completely closed state. */
        public void onDrawerClosed(View view) {
            super.onDrawerClosed(view);
            changeDrawerIconOnDrawerClick(R.drawable.ic_drawer);
        }
    };

     //to change default icon to hamburger item initially
    changeDrawerIconOnDrawerClick(R.drawable.ic_drawer);    }



private void changeDrawerIconOnDrawerClick(int resourceId) {
    //Drawable icon = ContextCompat.getDrawable(getApplicationContext(), resourceId);
    Drawable icon = ResourcesCompat.getDrawable(getResources(), resourceId, null);
    icon.setColorFilter(getResources().getColor(R.color.white), PorterDuff.Mode.SRC_ATOP);
    _drawerToggle.setDrawerIndicatorEnabled(false);
    _drawerToggle.setHomeAsUpIndicator(icon);
}
2
répondu DoubleK 2015-12-11 16:47:09

remplacer la flèche vers le haut par défaut avec votre propre tirable

getSupportActionBar().setHomeAsUpIndicator(R.drawable.hamburger);

1
répondu 0xcafebabe 2016-07-06 05:07:18

il suffit D'ajouter ce qui suit dans votre méthode onCreate,

if (getSupportActionBar() != null) {
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
            getSupportActionBar().setHomeButtonEnabled(true);
        }

        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                this, mDrawer, mToolbar, R.string.home_navigation_drawer_open, R.string.home_navigation_drawer_close) {

            public void onDrawerClosed(View view) {
                super.onDrawerClosed(view);
                invalidateOptionsMenu();
            }

            public void onDrawerOpened(View drawerView) {
                super.onDrawerOpened(drawerView);
                invalidateOptionsMenu();
            }

            @Override
            public void onDrawerSlide(View drawerView, float slideOffset) {
                super.onDrawerSlide(drawerView, slideOffset);
            }
        };
        mDrawer.addDrawerListener(toggle);
        toggle.syncState();

et en cordes.xml,

<string name="home_navigation_drawer_open">Open navigation drawer</string>
<string name="home_navigation_drawer_close">Close navigation drawer</string>
1
répondu Nanda Gopal 2016-10-24 07:33:26

utiliser ce constructeur dans MyActionBarDrawerToggle:

    public MyActionBarDrawerToggle(AppCompatActivity host, DrawerLayout drawerlayout, SupportToolbar toolbar, int openedResource, int closedResource)
        : base(host, drawerlayout, toolbar, openedResource, closedResource)
    {
        mHostActivity = host;
        mOpenedResource = openedResource;
        mClosedResource = closedResource;
    }

et appelez cette méthode dans la mainActivity (en utilisant AppCompatActivity)

        mDrawerToggle = new MyActionBarDrawerToggle(
            this,                           //Host Activity
            mDrawerLayout,                  //DrawerLayout
            mToolbar,                       //Toolbar
            Resource.String.openDrawer,     //Opened Message
            Resource.String.closeDrawer     //Closed Message
        );


        mDrawerLayout.AddDrawerListener(mDrawerToggle);
        SupportActionBar.SetHomeButtonEnabled(true);
        SupportActionBar.SetDisplayShowTitleEnabled(true);
        mDrawerToggle.DrawerIndicatorEnabled = true;
        mDrawerToggle.SyncState();
0
répondu Cyphrix_17 2016-12-30 12:44:50

dans onCreate() :

    setSupportActionBar(toolbar);
    ActionBar actionBar = getSupportActionBar();
    drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.open, R.string.close) {
        @Override
        public void onDrawerClosed(View drawerView) {
            super.onDrawerClosed(drawerView);
            supportInvalidateOptionsMenu();
        }

        @Override
        public void onDrawerOpened(View drawerView) {
            super.onDrawerOpened(drawerView);
            supportInvalidateOptionsMenu();
        }
    };
    drawerLayout.setDrawerListener(drawerToggle);


    drawerToggle.setToolbarNavigationClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Backstack.get(MainActivity.this).goBack();
        }
    });
    //actionBar.setHomeAsUpIndicator(R.drawable.ic_menu);
    //getSupportActionBar().setDisplayHomeAsUpEnabled(false);
    actionBar.setDisplayHomeAsUpEnabled(false);
    actionBar.setHomeButtonEnabled(true);

et lors de la mise en place de la navigation:

private void setupViewsForKey(Key key) {
    if(key.shouldShowUp()) {
        drawerToggle.setDrawerIndicatorEnabled(false);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    }
    else {
        getSupportActionBar().setDisplayHomeAsUpEnabled(false);
        drawerToggle.setDrawerIndicatorEnabled(true);
    }
    drawerToggle.syncState();
0
répondu EpicPandaForce 2017-01-26 14:42:39
 ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar,
            R.string.navigation_drawer_open, R.string.navigation_drawer_close);
    drawer.addDrawerListener(toggle);
    toggle.syncState();

c'est travailler avec moi

0
répondu Mohamed Hamole 2018-07-28 21:05:40