Cómo implementar DrawerArrowToggle desde la biblioteca de Android appcompat v7 21

Entonces, ahora que se lanzó Android 5.0, me preguntaba cómo implementar los icons animados de la barra de acciones.

Esta biblioteca aquí lo implementa bien, pero dado que la biblioteca appcompat v7 lo tiene, ¿cómo puede implementarse?

La biblioteca lo hace referencia en themes.xml

@style/Widget.AppCompat.DrawerArrowToggle 

Bajo este estilo

   

ACTUALIZAR

Lo implementé usando el v7 DrawerToggle. Sin embargo, no puedo estilizarlo. Por favor ayuda

Encontré el estilo para él en v7 styles_base.xml

  ?android:attr/textColorSecondary 2dp 18dp 3dp 11.31dp 16dp 24dp true  

Agregué esto a mis estilos y no funcionó. También agregado a mi attr.xml

                   

Pero se bloquea y dice error de tipo de color al hacerlo. ¿Qué me estoy perdiendo?

En primer lugar, debe saber ahora que android.support.v4.app.ActionBarDrawerToggle está en desuso.

Debe reemplazarlo con android.support.v7.app.ActionBarDrawerToggle .

Aquí está mi ejemplo y uso la nueva Toolbar de Toolbar para reemplazar la Toolbar de ActionBar .

MainActivity.java

 public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar mToolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(mToolbar); 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(); } 

styles.xml

   

Puede leer los documentos en AndroidDocument # DrawerArrowToggle_spinBars

Este atributo es la clave para implementar la animación de menú a flecha.

public static int DrawerArrowToggle_spinBars

Si las barras deben girar o no durante la transición
Debe ser un valor booleano, ya sea “verdadero” o “falso”.

Entonces, configura esto: true .

Entonces la animación puede ser presentada.

Espero que esto le pueda ayudar.

Si está utilizando la biblioteca de soporte proporcionada por DrawerLayout como se sugiere en la sección Creación de un cajón de navegación , puede usar el nuevo android.support agregado . v7 .app.ActionBarDrawerToggle (nota: diferente del android.support ahora obsoleto . v4 .app.ActionBarDrawerToggle ):

muestra un ícono de Hamburguesa cuando el cajón está cerrado y una flecha cuando el cajón está abierto. Anime entre estos dos estados cuando se abre el cajón.

Si bien la capacitación no se ha actualizado para tener en cuenta la desaprobación / clase nueva, debería poder usar casi exactamente el mismo código; la única diferencia en su implementación es el constructor.

Creé una pequeña aplicación que tenía una funcionalidad similar

Actividad principal

 public class MyActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my); DrawerLayout drawerLayout = (DrawerLayout) findViewById(R.id.drawer); android.support.v7.widget.Toolbar toolbar = (android.support.v7.widget.Toolbar) findViewById(R.id.toolbar); ActionBarDrawerToggle actionBarDrawerToggle = new ActionBarDrawerToggle( this, drawerLayout, toolbar, R.string.open, R.string.close ) { public void onDrawerClosed(View view) { super.onDrawerClosed(view); invalidateOptionsMenu(); syncState(); } public void onDrawerOpened(View drawerView) { super.onDrawerOpened(drawerView); invalidateOptionsMenu(); syncState(); } }; drawerLayout.setDrawerListener(actionBarDrawerToggle); //Set the custom toolbar if (toolbar != null){ setSupportActionBar(toolbar); } getSupportActionBar().setDisplayHomeAsUpEnabled(true); actionBarDrawerToggle.syncState(); } } 

Mi XML de esa actividad

         

Mi barra de herramientas personalizada XML

     

Mi estilo de tema

     #457C50 #580C0C  

Mis estilos en values-v21

     

Para responder a la parte actualizada de su pregunta: para diseñar el ícono / flecha del cajón, tiene dos opciones:

Estilo de la flecha en sí

Para hacer esto, anula drawerArrowStyle en tu tema así:

   

Esto probablemente no es lo que quieres , porque el ActionBar mismo debería tener un estilo consistente con la flecha, entonces, lo más probable es que quieras la opción dos:

Tema la barra de herramientas / barra de herramientas

Reemplace el android:actionBarTheme ( actionBarTheme for appcompat) del tema de la aplicación global con su propio tema (que probablemente debería derivar de ThemeOverlay.Material.ActionBar/ThemeOverlay.AppCompat.ActionBar ) de la siguiente manera:

   

Una nota importante aquí es que al usar un diseño personalizado con una Toolbar de Toolbar lugar de una implementación ActionBar (por ejemplo, si está utilizando el DrawerLayoutNavigationViewToolbar para lograr el efecto de cajón de Material en donde está visible en la barra de estado translúcida), actionBarTheme atributo actionBarTheme obviamente no se recoge de forma automática (porque AppCompatActivity en AppCompatActivity para la ActionBar predeterminada), por lo que para su Toolbar personalizada no olvide aplicar su tema manualmente:

   

– Esto se resolverá ya sea en ThemeOverlay.AppCompat.ActionBar predeterminado de ThemeOverlay.AppCompat.ActionBar o en su reemplazo si establece el atributo en su tema derivado.

PD: un pequeño comentario sobre la anulación drawerArrowStyle y el atributo spinBars , que muchas fonts sugieren que debe establecerse en true para obtener la animación de la spinBars / flecha. La cosa es que, spinBars es true por defecto en AppCompat ( Base.Widget.AppCompat.DrawerArrowToggle.Common estilo Base.Widget.AppCompat.DrawerArrowToggle.Common ), no tienes que anular actionBarTheme en absoluto para que la animación funcione. Obtienes la animación, incluso si la anulas y configuras el atributo como false , es solo una animación diferente, menos twirly. Lo importante aquí es usar ActionBarDrawerToggle , es lo que atrae el dibujante animado de lujo.

Quiero corregir un poco el código anterior

  public class MainActivity extends ActionBarActivity { @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); } 

y todas las demás cosas se mantendrán igual …

Para aquellos que están teniendo problema, Drawerlayout superpone la barra de herramientas

agregue android:layout_marginTop="?attr/actionBarSize" para android:layout_marginTop="?attr/actionBarSize" diseño del contenido del cajón