webentwicklung-frage-antwort-db.com.de

Symbolleistennavigation Hamburger-Symbol fehlt

Ich suche nach einer Möglichkeit, das Hamburger-Symbol ohne Verwendung der Schublade/DrawerToggle anzuzeigen, und verwende das Standardsymbol in Android enter image description here

Durch Setzen von getSupportActionBar().setDisplayHomeAsUpEnabled(true); wird der Rückpfeil angezeigt, nicht jedoch der Hambuerger. Andere Posts auf Stackoverflow (wie this oder this ) verwenden das DrawerLayout oder ein benutzerdefiniertes Drawable. Ich kann den Vektor oder das PNG für das Hamburger-Symbol in der Android Quelle nicht finden.

Weißt du, wie ich das ursprüngliche Hamburger-Symbol in der Android/Support-Bibliothek finden kann? (oder wie ich es anzeigen soll)

Hinweis: Vector und PNG finden Sie auf der Website google.com/design:http://www.google.com/design/spec/resources/sticker-sheets-icons) .html #

In meiner Tätigkeit

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

Layoutdatei

<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>
67
Hugo Gresse

Wenn Sie die gleiche Schublade wie Lollipop verwenden möchten, lassen Sie mich Ihnen sagen, dass dies kein statisches Bild ist. Dieses Bild wird in Echtzeit von einer Klasse namens DrawerArrowDrawableToggle gezeichnet. Dafür gibt es also kein "Hamburger" -Icon.

Wenn Sie jedoch das Hamburger-Symbol ohne Animation haben möchten, finden Sie es hier:

https://material.io/tools/icons/?icon=menu&style=baseline

enter image description here

37
Pedro Oliveira

Um ein animiertes Hamburger-Symbol zu erhalten, sollten Sie DrawerLayout mit ActionBarDrawerToggle verwenden und das Symbol für ActionBar und für ActionBarDrawerToggle aktivieren.

Beispiel:

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

Außerdem müssen Sie Ihrer Aktivität die folgenden Methoden hinzufügen:

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

@Override
public void onConfigurationChanged(Configuration newConfig)
{
    super.onConfigurationChanged(newConfig);
    mDrawerToggle.onConfigurationChanged(newConfig);
}
31
mohax

Sie können versuchen, Ihr eigenes Zeichen für das Hamburger-Symbol wie dieses zu erstellen.

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

Dann in Ihrem Fragment/Aktivität,

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

Für andere Drawables kann dies hilfreich sein: https://github.com/google/material-design-icons/blob/master/navigation/drawable-anydpi-v21/

11
BBrain

Dazu brauchen Sie nur einige Zeilen zu schreiben

   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.addDrawerListener(toggle);
   toggle.setDrawerIndicatorEnabled(true);
   toggle.syncState();

toggle.setDrawerIndicatorEnabled (true); Wenn dies false ist, machen Sie es true oder entfernen Sie diese Zeile

11
Vivek Barai

Ich hatte das gleiche Problem und fand hier die einfachste Lösung:

appcompatv7-v21-navigation-drawer-not-showing-hamburger-icon

Alles was ich tun musste war anzurufen:

mDrawerToggle.syncState();
9

Hier ist die einfachste Lösung, die für mich funktioniert hat.

Das ActionBarDrawerToggle hat zwei Typen-Konstruktoren. Einer von ihnen nimmt Symbolleiste als Parameter. Verwenden Sie diese (zweite unten), um den animierten Hamburger zu erhalten.

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
8
Thupten

Ich hatte das gleiche problem Holen Sie sich das ToolBar und stellen Sie dann das Navigationssymbol ein

final Android.support.v7.widget.Toolbar toolbar = (Android.support.v7.widget.Toolbar) findViewById(R.id.toolbar);
toolbar.setNavigationIcon(R.drawable.blablabla);
7
    Toolbar mToolbar = (Toolbar) findViewById(R.id.toolbar);
    mToolbar.setTitle("title");
    setSupportActionBar(mToolbar);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    getSupportActionBar().setHomeButtonEnabled(true);
    getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_list);
7
Tarun Voora

ok, um den Zurückpfeil zu verbergen

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

dann finden Sie Hamburger-Symbol im Web -> Hamburger

und schließlich stellen Sie diese Zeichenfunktion in Ihrem Projekt mit der Aktionsleistenmethode ein:

getSupportActionBar().setLogo(R.drawable.hamburger_icon);
5
Sniper

Vielleicht können Sie dies versuchen, aber Sie verlieren die Animation zwischen Pfeil und Hamburger-Symbol

@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);
}
3
DoubleK

Fügen Sie einfach Folgendes in Ihre onCreate-Methode ein:

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

und in strings.xml

<string name="home_navigation_drawer_open">Open navigation drawer</string>
<string name="home_navigation_drawer_close">Close navigation drawer</string>
2
Nanda Gopal

Ersetzen Sie den standardmäßigen Aufwärtspfeil durch Ihren eigenen Zeichenpfeil

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

2
junhaotee
 ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar,
            R.string.navigation_drawer_open, R.string.navigation_drawer_close);
    drawer.addDrawerListener(toggle);
    toggle.syncState();

es ist Arbeit mit mir

2
Mohamed Hamole

Verwenden Sie diesen Konstruktor in 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;
    }

und Rufe diese Methode in der mainActivity auf (Using 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();
1
Cyphrix_17

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

Und beim Einrichten der UP-Navigation:

private void setupViewsForKey(Key key) {
    if(key.shouldShowUp()) {
        drawerToggle.setDrawerIndicatorEnabled(false);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    }
    else {
        getSupportActionBar().setDisplayHomeAsUpEnabled(false);
        drawerToggle.setDrawerIndicatorEnabled(true);
    }
    drawerToggle.syncState();
1
EpicPandaForce