Animación ActionBarDrawerToggle
Estoy usando el ActionBarDrawerToggle de la librería appcompat v7 en mi aplicación y tengo algunos problemas con la animación de menú a flecha. De acuerdo con las directrices de diseño del material, el cajón de navegación debe superponerse a la barra de herramientas y la animación del icono no debe utilizarse al abrir el cajón, según entiendo.
¿Por qué se activa la animación de forma predeterminada al abrir / cerrar el cajón de navegación y cómo puedo desactivarlo?
- ¿Barra de herramientas Android para API 19? (Para la API 21 funciona bien)
- Cómo cambiar la lista de color del elemento seleccionado en el cajón de navidgation?
- Cajón de navegación Cambia el fondo mientras se desplaza
- Android Design Navigation Drawer - ¿Cómo agregar un conmutador en el navegador xml?
- Mover el sherlock de la barra de acción con el menú de navegación del cajón
Además, ¿cómo puedo activar la animación en otras ocurrencias? He encontrado esta solución, pero sólo funciona para Android API 11+ y su sobrescrita por llamar a setDrawerIndicatorEnabled(false)
o por un ActionView ampliado en la barra de herramientas.
- Notificación de la divisa en la barra de herramientas en la barra de herramientas - Android
- TabHost muestra contenido una vez (onCreate)
- Elementos del menú de NavigationView con el contador a la derecha
- Android.view.InflateException: Línea # 1 del archivo XML binario: Error al inflar la clase <unknown>
- ¿Cómo agregar el indicador de "menú" junto al icono de la aplicación de Barra de Acción?
- Cajón de navegación con cabeceras / secciones
- Dimensión de imagen de fondo para la cabecera del cajón de navegación
- ¿Cómo reemplazar el icono de la hamburguesa utilizado para ActionBarToggle en la barra de herramientas de Android con una costumbre drawable?
Cuando crea su ActionBarDrawerToggle, hágalo de esta manera para desactivar la animación / flecha y mostrar siempre una hamburguesa:
drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, getToolbar(), R.string.open, R.string.close) { @Override public void onDrawerClosed(View view) { super.onDrawerClosed(view); } @Override public void onDrawerOpened(View drawerView) { super.onDrawerOpened(drawerView); super.onDrawerSlide(drawerView, 0); // this disables the arrow @ completed state } @Override public void onDrawerSlide(View drawerView, float slideOffset) { super.onDrawerSlide(drawerView, 0); // this disables the animation } };
Me encontré con este problema tooday y encontró simple y (I belive) una solución adecuada:
Simplemente no establezca la instancia de ActionBarDrawerToggle como DrawerListener para su DrawerLayout. De esta manera ActionBarDrawerToggle no realizará la animación que depende del desplazamiento de la diapositiva del cajón.
Si necesita un oyente para DrawerLayout use DrawerLayout.DrawerListener.
Editar: También puede establecer ActionBarDrawerToggle como un oyente, pero que debe overide su método onDrawerSlide. Por ejemplo:
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.string.drawer_open_desc, R.string.drawer_close_desc) { @Override public void onDrawerSlide(View drawerView, float slideOffset) { super.onDrawerSlide(drawerView, 0); } };
Llamando a super.onDrawerSlide()
con valor 0 en lugar de slideOffset, deshabilita la animación
Agrega DrawerArrowStyle
en tu Tema como arriba. Lo hace el truco …
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar"> <!-- Customize your theme here. --> <item name="drawerArrowStyle">@style/DrawerArrowStyle</item> </style> <style name="DrawerArrowStyle" parent="Widget.AppCompat.DrawerArrowToggle"> <item name="spinBars">true</item> <item name="color">@android:color/white</item> </style>
Ejemplo de actividad
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar mToolbar = (Toolbar) findViewById(R.id.toolbar); DrawerLayout mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); ActionBarDrawerToggle mDrawerToggle = new ActionBarDrawerToggle( this, mDrawerLayout, mToolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close ); mDrawerLayout.setDrawerListener(mDrawerToggle); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setHomeButtonEnabled(true); mDrawerToggle.syncState(); }
Sé que estoy super tarde …
Haga esto en la actividad:
drawerToggle.setDrawerIndicatorEnabled(false);
En el tema styles.xml. Hacer esto:
<item name="android:homeAsUpIndicator">@drawable/menu_icon</item>
mDrawerToggle = new ActionBarDrawerToggle( this, mDrawerLayout, mToolbar, R.string.drawer_open, R.string.drawer_close ) { public void onDrawerClosed(View view) { super.onDrawerClosed(view); invalidateOptionsMenu(); syncState(); } public void onDrawerOpened(View drawerView) { super.onDrawerOpened(drawerView); invalidateOptionsMenu(); syncState(); mLeftMenuFrame.bringToFront(); mRightMenuFrame.bringToFront(); } }; mDrawerToggle.setDrawerIndicatorEnabled(true); mDrawerLayout.setDrawerListener(mDrawerToggle); mToolbar.inflateMenu(R.menu.menu_main); getSupportActionBar().setDisplayHomeAsUpEnabled(true); mDrawerToggle.syncState();
- ¿Cuál es la longitud máxima para un nombre de aplicación de Android?
- TextView onClick no responde a un solo toque