Entonces, ahora que se lanzó Android 5.0, me preguntaba cómo implementar los íconos animados de la barra de acción.
Esta biblioteca aquí lo implementa bien para mí, pero dado que la biblioteca appcompat v7 lo tiene, ¿cómo se puede implementar?
La biblioteca lo hace referencia en themes.xml
<item name="drawerArrowStyle">@style/Widget.AppCompat.DrawerArrowToggle</item>
Bajo este estilo
<style name="Base.V7.Theme.AppCompat" parent="Platform.AppCompat">
ACTUALIZAR
Conseguí esto implementado usando el v7 DrawerToggle. Sin embargo, no puedo diseñarlo. Por favor ayuda
Encontré el estilo en v7 styles_base.xml
<style name="Base.Widget.AppCompat.DrawerArrowToggle" parent="">
<item name="color">?android:attr/textColorSecondary</item>
<item name="thickness">2dp</item>
<item name="barSize">18dp</item>
<item name="gapBetweenBars">3dp</item>
<item name="topBottomBarArrowSize">11.31dp</item>
<item name="middleBarArrowSize">16dp</item>
<item name="drawableSize">24dp</item>
<item name="spinBars">true</item>
</style>
Agregué esto a mis estilos y no funcionó. También agregado a mi attr.xml
<declare-styleable name="DrawerArrowToggle">
<!-- The drawing color for the bars -->
<attr name="color" format="color"/>
<!-- Whether bars should rotate or not during transition -->
<attr name="spinBars" format="boolean"/>
<!-- The total size of the drawable -->
<attr name="drawableSize" format="dimension"/>
<!-- The max gap between the bars when they are parallel to each other -->
<attr name="gapBetweenBars" format="dimension"/>
<!-- The size of the top and bottom bars when they merge to the middle bar to form an arrow -->
<attr name="topBottomBarArrowSize" format="dimension"/>
<!-- The size of the middle bar when top and bottom bars merge into middle bar to form an arrow -->
<attr name="middleBarArrowSize" format="dimension"/>
<!-- The size of the bars when they are parallel to each other -->
<attr name="barSize" format="dimension"/>
<!-- The thickness (stroke size) for the bar paint -->
<attr name="thickness" format="dimension"/>
</declare-styleable>
Pero se bloquea y dice un error de tipo de color al hacerlo. ¿Qué me estoy perdiendo?
mDrawerToggle.syncState();
arregló.Cannot resolve method setSupportActionBar(android.widget.Toolbar)
. También he probado conandroid.support.v7.toolbar
. ¿Alguien sabe por qué sucede esto?setSupportActionBar(mToolbar);
y definido<item name="spinBars">true</item>
, pero la animación no funcionaSi está utilizando el DrawerLayout proporcionado por la biblioteca de soporte como se sugiere en la capacitación Creación de un cajón de navegación , puede usar el android.support recién agregado . v7 .app.ActionBarDrawerToggle (nota: diferente del ahora obsoleto android.support. v4 .app.ActionBarDrawerToggle ):
Si bien el entrenamiento no se ha actualizado para tener en cuenta la obsolescencia / nueva clase, debería poder usarlo casi exactamente el mismo código; la única diferencia en la implementación es el constructor.
fuente
ActionBarDrawerToggle
. La respuesta canónica del fabricante de AppCompat tiene un ejemplo completo de cómo debe estructurarse su XML.Creé una pequeña aplicación que tenía una funcionalidad similar
Actividad principal
Mi XML de esa actividad
XML de mi barra de herramientas personalizada
Mi estilo de tema
Mis estilos en valores-v21
fuente
Para responder a la parte actualizada de su pregunta: para diseñar el icono / flecha del cajón, tiene dos opciones:
Estilo de la propia flecha
Para hacer esto, anule
drawerArrowStyle
su tema así:Probablemente esto no sea lo que desea , porque la barra de acción en sí debería tener un estilo coherente con la flecha, por lo que lo más probable es que desee la opción dos:
Tema de la barra de acciones / barra de herramientas
Anular el
android:actionBarTheme
(actionBarTheme
atributo para appcompat) del tema global solicitud con su propio tema (que probablemente debería derivar deThemeOverlay.Material.ActionBar/ThemeOverlay.AppCompat.ActionBar
) de esta manera:Una nota importante aquí es que cuando se usa un diseño personalizado con una
Toolbar
implementación de ActionBar en lugar de stock (por ejemplo, si está usando el comboDrawerLayout
-NavigationView
-Toolbar
para lograr el efecto de cajón de estilo Material donde es visible debajo de la barra de estado translúcida), elactionBarTheme
atributo obviamente no es recogido automáticamente (porque está destinado a ser atendido porAppCompatActivity
el predeterminadoActionBar
), por lo que para su personalizaciónToolbar
no olvide aplicar su tema manualmente:- esto se resolverá en el valor predeterminado de AppCompat
ThemeOverlay.AppCompat.ActionBar
o en su anulación si establece el atributo en su tema derivado.PD: un pequeño comentario sobre la
drawerArrowStyle
anulación y elspinBars
atributo, que muchas fuentes sugieren que se debe configurartrue
para obtener la animación del cajón / flecha. La cosa esspinBars
que estátrue
por defecto en AppCompat (revisa elBase.Widget.AppCompat.DrawerArrowToggle.Common
estilo), no tienes que anularactionBarTheme
nada para que la animación funcione. Obtiene la animación incluso si la anula y establece el atributo enfalse
, es solo una animación diferente, menos giratoria. Lo importante aquí es usarActionBarDrawerToggle
, es lo que atrae el elegante dibujo animado.fuente
Quiero corregir un poco el código anterior.
y todas las demás cosas seguirán igual ...
Para aquellos que tienen problemas para
Drawerlayout
superponer la barra de herramientasagregar
android:layout_marginTop="?attr/actionBarSize"
al diseño raíz del contenido del cajónfuente
getSupportActionBar()
cuando solo extiendesActivity
?ActionBarActivity