Existe um emblema ou método padrão do Android para mostrar o ícone de notificação da barra de ação com uma contagem como nos exemplos do Google?
Caso contrário, qual é a melhor maneira de fazê-lo?
Eu sou novo no android, por favor ajude.
Existe um emblema ou método padrão do Android para mostrar o ícone de notificação da barra de ação com uma contagem como nos exemplos do Google?
Caso contrário, qual é a melhor maneira de fazê-lo?
Eu sou novo no android, por favor ajude.
Respostas:
Não tenho certeza se essa é a melhor solução ou não, mas é o que eu preciso.
Diga-me se você sabe o que precisa ser alterado para obter melhor desempenho ou qualidade. No meu caso, eu tenho um botão.
Item personalizado no meu menu - main.xml
Drawable de forma personalizada (quadrado do plano de fundo) - shape_notification.xml
Layout para minha visualização - feed_update_count.xml
MainActivity - definindo e atualizando minha visualização
fonte
MenuItem item = menu.findItem(R.id.badge); MenuItemCompat.setActionView(item, R.layout.feed_update_count); notifCount = (Button) MenuItemCompat.getActionView(item);
android:icon="..."
item de menu XML. Oandroid:actionLayout="..."
suficiente, lá. Para oButton
XML no layout, você pode usar a tag de fechamento automático<Button ... />
porque a tag não pode ter conteúdo. Você precisa fechar a<shape>
tag (novamente: fechamento automático). E você não precisa doinvalidateOptionsMenu()
. Para mim, isso nem funciona, pois o emblema é sempre inflado de XML novamente. Então, o todosetNotifCount(...)
é inútil. Basta ligarsetText(...)
no crachá. E você pode lançargetActionView()
aButton
diretamente.Editar Desde a versão 26 da biblioteca de suporte (ou androidx), você não precisa mais implementar um costume
OnLongClickListener
para exibir a dica de ferramenta. Basta chamar isso:Vou compartilhar meu código caso alguém queira algo assim:
layout / menu / menu_actionbar.xml
layout / action_bar_notifitcation_icon.xml
Observe o estilo e o android: propriedades clicáveis . estes tornam o layout do tamanho de um botão e o fundo fica cinza quando tocado.
drawable-xhdpi / ic_bell.png
Uma imagem de 64x64 pixels com preenchimentos de 10 pixels de todos os lados. Você deveria ter preenchimentos de 8 pixels de largura, mas acho que a maioria dos itens padrão é um pouco menor que isso. Obviamente, você desejará usar tamanhos diferentes para densidades diferentes.
drawable / rounded_square.xml
Aqui, # ff222222 (cor # 222222 com alfa #ff (totalmente visível)) é a cor de plano de fundo da minha barra de ação.
com / ubergeek42 / WeechatAndroid / WeechatActivity.java
Aqui tornamos clicável e atualizável! Criei um ouvinte abstrato que fornece a criação do Toast no onLongClick, o código foi retirado das fontes do ActionBarSherlock .
fonte
app:actionLayout="@layout/action_bar_notifitcation_icon"
vez deandroid:actionLayout="@layout/action_bar_notifitcation_icon"
usar emMenuItemCompat.getActionView
vez demenu.findItem(R.id.menu_hotlist).getActionView();
problemas de compatibilidade.MenuItem.getActionView
não é compatível com nível API <11.android:actionLayout
:; AppCompat:app:actionLayout
no seu item de menu.Apenas para adicionar. Se alguém quiser implementar um balão preenchido, veja o código (nomeie
bage_circle.xml
):Você pode ter que ajustar a espessura de acordo com sua necessidade.
EDIT: Aqui está o layout para o botão (nome
badge_layout.xml
):No menu criar item:
Em
onCreateOptionsMenu
obter referência ao item de menu:Após receber a notificação de mensagens, defina a contagem:
Este código usa Iconify-fontawesome .
fonte
Não gosto de
ActionView
soluções baseadas, minha ideia é:TextView
, queTextView
será preenchido pelo aplicativoquando você precisar desenhar um
MenuItem
:2.1 inflar layout
2.2 call
measure()
&layout()
(caso contrárioview
, será 0 px x 0 px, é muito pequeno para a maioria dos casos de uso)2.3 defina o
TextView
texto do2.4 faça "screenshot" da vista
2.6 set
MenuItem
ícone 's com base em bitmap criado no 2.4lucro!
então, resultado deve ser algo como
@drawable/unread_background
éTextView
o fundo verde ,@drawable/ic_menu_gallery
não é realmente necessário aqui, é apenas para visualizar o resultado do layout no IDE.adicione código em
onCreateOptionsMenu
/onPrepareOptionsMenu
Implemente o método build-the-icon:
O código completo está aqui: https://github.com/cvoronin/ActionBarMenuItemCounter
fonte
Ok, a solução @AndrewS funcionará com a biblioteca v7 appCompat :
.
O restante do código é o mesmo.
fonte
android:actionLayout
paraapp:actionLayout
ele funciona como charme.Tente analisar as respostas para essas perguntas, principalmente a segunda que possui um código de exemplo:
Como implementar valores dinâmicos no item de menu no Android
Como obter texto em um ícone da ActionBar?
Pelo que vejo, você precisará criar sua própria
ActionView
implementação personalizada . Uma alternativa pode ser um costumeDrawable
. Observe que parece não haver implementação nativa de uma contagem de notificações para a barra de ação.EDIT: A resposta que você estava procurando, com o código: Custom Notification View with sample sample
fonte
Drawable
s, como visto nos dois links a seguir: stackoverflow.com/questions/6691818/… e stackoverflow.com/questions/3972445/…Drawable
algo através de algo como o link aqui e, em seguida, criar um atributo para o seu costumeDrawable
com texto sobre ele, para que você possa criar a coisa toda em XML e ajuste-o como desejar. Como alternativa, você pode adicionar o Drawable em Java se isso for muito difícil.Quando você usa a barra de ferramentas:
e na chamada de carregamento de dados refreshMenu ():
fonte
Encontrei uma solução muito boa aqui , estou usando com o kotlin.
Primeiro, na pasta drawable, você deve criar
item_count.xml
:No seu
Activity_Main
layout, alguns como:E você pode modificar como:
fonte
Eu encontrei uma maneira melhor de fazer isso. se você quiser usar algo assim
Use essa dependência
crie um arquivo xml no drawable e salve-o como Badge.xml
Agora, onde quer que você queira usar esse emblema, use o código a seguir no xml. com a ajuda disso, você poderá ver o emblema no canto superior direito da sua imagem ou algo assim.
Agora, finalmente, no yourFile.java, use estas 2 coisas simples. 1) Defina
2) onde seu loop ou qualquer coisa que esteja contando esse número use este:
aqui,
mBadge.setNumber(0)
não mostrará nada.Espero que esta ajuda.
fonte