android android-support-library material-design android-toolbar

android - Barra de herramientas Navegación Falta el icono de hamburguesa



android-support-library material-design (15)

Aquí está la solución más simple que funcionó para mí.

ActionBarDrawerToggle tiene dos tipos de constructores. Uno de ellos toma la barra de herramientas como parámetro. Use eso (el segundo a continuación) para obtener la hamburguesa animada .

final android.support.v7.widget.Toolbar toolbar = (android.support.v7.widget.Toolbar) findViewById(R.id.toolbar); toolbar.setNavigationIcon(R.drawable.blablabla);

Estoy buscando una manera de mostrar el ícono de la hamburguesa sin usar el cajón / alternar cajones y usar el ícono predeterminado incluido en Android

Al establecer getSupportActionBar().setDisplayHomeAsUpEnabled(true); muestra la flecha hacia atrás pero no el hambuerger. Otra publicación en Stackoverflow (como this o this ) usa DrawerLayout o un dibujo personalizado. No puedo encontrar el vector o png para el icono de hamburguesa en la fuente de Android.

¿Sabes cómo puedo encontrar el ícono original de hamburguesa en la biblioteca de Android / soporte? (o cómo mostrarlo)

Nota: Vector y png se pueden encontrar en el sitio web google.com/design: http://www.google.com/design/spec/resources/sticker-sheets-icons.html#

En mi actividad

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

Archivo de diseño

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


Para eso solo necesitas escribir en algunas líneas

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

toggle.setDrawerIndicatorEnabled (verdadero); si esto es falso, hágalo verdadero o elimine esta línea


Para tener un ícono de hamburguesa animado, debe usar DrawerLayout con ActionBarDrawerToggle y habilitar el ícono para ActionBar y para ActionBarDrawerToggle .

Ejemplo:

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

Además, debe agregar estos métodos a su Actividad:

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


Puedes intentar hacer tu propio dibujo para el icono de hamburguesa como este.

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

Luego, en tu fragmento / actividad,

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

Para otros sorteos, esto podría ser útil: https://github.com/google/material-design-icons/blob/master/navigation/drawable-anydpi-v21/


Reemplace la flecha hacia arriba predeterminada con su propia dibujable

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


Si quieres usar el mismo cajón que lollipop, déjame decirte que no es una imagen estática. Esa imagen es dibujada en tiempo real por una clase llamada DrawerArrowDrawableToggle . Entonces no hay un icono de "hamburguesa" para eso.

Sin embargo, si desea el icono de hamburguesa sin animación, puede encontrarlo aquí:

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


Simplemente agregue lo siguiente en su método onCreate,

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

y en strings.xml,

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


Tal vez puedas probar esto, pero perderás la animación entre la flecha y el ícono de la hamburguesa

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


Tuve el mismo problema y encontré la solución más simple aquí:

this

Todo lo que tenía que hacer era llamar:

mDrawerToggle.syncState();


Utilice este constructor en 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; }

y llame a este método en mainActivity (Uso de 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();


Yo tuve el mismo problema. Obtenga la ToolBar y luego configure el icono de navegación

Toolbar mToolbar = (Toolbar) findViewById(R.id.toolbar); mToolbar.setTitle("title"); setSupportActionBar(mToolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setHomeButtonEnabled(true); getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_list);


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

Y al configurar la navegación hacia ARRIBA:

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


ok para ocultar el uso de la flecha hacia atrás

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

luego encuentre el icono de hamburguesa en la web -> hamburger

y finalmente, configura esto en tu proyecto con el método de la barra de acción:

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


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

es trabajo conmigo


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