Agora que o Android 5.0 foi lançado, eu queria saber como implementar os ícones animados da barra de ações.
Esta biblioteca aqui o implementa bem para mim, mas como a biblioteca appcompat v7 o possui, como pode ser implementado?
A biblioteca faz referência a ele em themes.xml
<item name="drawerArrowStyle">@style/Widget.AppCompat.DrawerArrowToggle</item>
Sob este estilo
<style name="Base.V7.Theme.AppCompat" parent="Platform.AppCompat">
ATUALIZAR
Implementei isso usando o DrawerToggle v7. No entanto, não posso estilizá-lo. Por favor ajude
Encontrei o estilo dele no 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>
Eu adicionei isso aos meus estilos e não funcionou. Também adicionado ao meu 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>
Mas trava e diz erro de tipo de cor ao fazer isso. O que estou perdendo?
mDrawerToggle.syncState();
consertou.Cannot resolve method setSupportActionBar(android.widget.Toolbar)
. Eu também tentei comandroid.support.v7.toolbar
. Alguém sabe por que isso acontece?setSupportActionBar(mToolbar);
e também defini,<item name="spinBars">true</item>
mas a animação não está funcionandoSe estiver usando o DrawerLayout fornecido pela Biblioteca de Suporte, conforme sugerido no treinamento Criando uma gaveta de navegação , você pode usar o android.support recém-adicionado . v7 .app.ActionBarDrawerToggle (observação: diferente do agora obsoleto android.support. v4 .app.ActionBarDrawerToggle ):
Embora o treinamento não tenha sido atualizado para levar em consideração a depreciação / nova classe, você deve ser capaz de usá-lo quase exatamente o mesmo código - a única diferença na implementação é o construtor.
fonte
ActionBarDrawerToggle
. A resposta canônica do criador do AppCompat tem um exemplo completo de como seu XML deve ser estruturado.Eu criei um pequeno aplicativo que tinha uma funcionalidade semelhante
Atividade principal
Meu XML dessa atividade
XML da minha barra de ferramentas personalizada
Meu estilo de tema
Meus estilos em valores-v21
fonte
Para responder à parte atualizada da sua pergunta: para estilizar o ícone / seta da gaveta, você tem duas opções:
Defina o estilo da própria seta
Para fazer isso, substitua
drawerArrowStyle
em seu tema assim:Provavelmente não é isso que você deseja , porque a própria ActionBar deve ter um estilo consistente com a seta, então, provavelmente, você deseja a opção dois:
Tema a ActionBar / Toolbar
Substitua o atributo
android:actionBarTheme
(actionBarTheme
for appcompat) do tema do aplicativo global por seu próprio tema (do qual você provavelmente deve derivarThemeOverlay.Material.ActionBar/ThemeOverlay.AppCompat.ActionBar
) assim:Uma observação importante aqui é que ao usar um layout personalizado com uma
Toolbar
implementação ActionBar em vez de estoque (por exemplo, se você estiver usando a combinaçãoDrawerLayout
-NavigationView
-Toolbar
para obter o efeito de gaveta de estilo de material onde é visível sob a barra de status translúcida), oactionBarTheme
atributo obviamente não escolhido automaticamente (porque deve ser cuidado peloAppCompatActivity
padrãoActionBar
), portanto, para o seu costumeToolbar
, não se esqueça de aplicar o tema manualmente:- isso resolverá o padrão do AppCompat
ThemeOverlay.AppCompat.ActionBar
ou a sua substituição se você definir o atributo em seu tema derivado.PS, um pequeno comentário sobre a
drawerArrowStyle
substituição e ospinBars
atributo - que várias fontes sugerem que deve ser definidotrue
para obter a animação da gaveta / seta. Coisa é,spinBars
étrue
por padrão no AppCompat (confira oBase.Widget.AppCompat.DrawerArrowToggle.Common
estilo), você não tem que substituiractionBarTheme
em tudo para obter o trabalho de animação. Você obtém a animação mesmo se substituí-la e definir o atributo comofalse
, é apenas uma animação diferente, menos sinuosa. O importante aqui é usarActionBarDrawerToggle
, é o que puxa o desenho animado extravagante.fonte
Eu quero corrigir um pouco o código acima
e todas as outras coisas permanecerão iguais ...
Para aqueles que estão tendo problemas para
Drawerlayout
sobrepor a barra de ferramentasadicionar
android:layout_marginTop="?attr/actionBarSize"
ao layout raiz do conteúdo da gavetafonte
getSupportActionBar()
quando apenas estendeActivity
?ActionBarActivity