¿Existe una insignia o método estándar de Android para mostrar el icono de notificación de la barra de acción con un recuento como en los ejemplos de Google?
Si no, ¿cuál es la mejor manera de hacerlo?
Soy nuevo en Android, por favor ayuda.
¿Existe una insignia o método estándar de Android para mostrar el icono de notificación de la barra de acción con un recuento como en los ejemplos de Google?
Si no, ¿cuál es la mejor manera de hacerlo?
Soy nuevo en Android, por favor ayuda.
Respuestas:
No estoy seguro de si esta es la mejor solución o no, pero es lo que necesito.
Por favor, dígame si sabe qué se debe cambiar para obtener un mejor rendimiento o calidad. En mi caso, tengo un botón.
Elemento personalizado en mi menú - main.xml
Forma personalizada dibujable (cuadrado de fondo) - shape_notification.xml
Diseño para mi vista: feed_update_count.xml
MainActivity: configuración y actualización de mi vista
fuente
MenuItem item = menu.findItem(R.id.badge); MenuItemCompat.setActionView(item, R.layout.feed_update_count); notifCount = (Button) MenuItemCompat.getActionView(item);
android:icon="..."
elemento XML en el elemento del menú. Elandroid:actionLayout="..."
es suficiente, allí. Para elButton
XML de diseño, puede usar la etiqueta de cierre automático<Button ... />
porque la etiqueta no puede tener contenido. Necesita cerrar la<shape>
etiqueta (de nuevo: cierre automático). Y no necesitas elinvalidateOptionsMenu()
. Para mí, eso ni siquiera funciona, ya que la insignia siempre se infla desde XML nuevamente. Entonces, el todosetNotifCount(...)
es inútil. Solo llamasetText(...)
a la insignia. Y usted puede echargetActionView()
aButton
directamente.Editar Desde la versión 26 de la biblioteca de soporte (o androidx) ya no necesita implementar una costumbre
OnLongClickListener
para mostrar la información sobre herramientas. Simplemente llame a esto:Compartiré mi código en caso de que alguien quiera algo como esto:
layout / menu / menu_actionbar.xml
layout / action_bar_notifitcation_icon.xml
Estilo de nota y Android: propiedades clicables . estos hacen que el diseño sea del tamaño de un botón y hacen que el fondo sea gris cuando se toca.
drawable-xhdpi / ic_bell.png
Una imagen de 64x64 píxeles con rellenos de 10 píxeles de ancho desde todos los lados. Se supone que tiene rellenos de 8 píxeles de ancho, pero creo que la mayoría de los elementos predeterminados son un poco más pequeños que eso. Por supuesto, querrás usar diferentes tamaños para diferentes densidades.
drawable / rounded_square.xml
Aquí, # ff222222 (color # 222222 con alfa #ff (totalmente visible)) es el color de fondo de mi Barra de acción.
com / ubergeek42 / WeechatAndroid / WeechatActivity.java
¡Aquí lo hacemos clicable y actualizable! Creé un oyente abstracto que proporciona la creación de Toast en onLongClick, el código fue tomado de las fuentes de ActionBarSherlock .
fuente
app:actionLayout="@layout/action_bar_notifitcation_icon"
lugar deandroid:actionLayout="@layout/action_bar_notifitcation_icon"
si tiene que usar enMenuItemCompat.getActionView
lugar demenu.findItem(R.id.menu_hotlist).getActionView();
para problemas de compatibilidad.MenuItem.getActionView
no es compatible con el nivel API <11.android:actionLayout
; AppCompat:app:actionLayout
en su elemento del menú.Solo para agregar. Si alguien quiere implementar una burbuja de círculo llena, aquí está el código (nómbrelo
bage_circle.xml
):Puede que tenga que ajustar el grosor según sus necesidades.
EDITAR: Aquí está el diseño para el botón (nómbrelo
badge_layout.xml
):En el menú crear elemento:
En
onCreateOptionsMenu
obtener referencia al elemento del menú:Después de recibir la notificación de mensajes, establezca el recuento:
Este código usa Iconify-fontawesome .
fuente
No me gustan las
ActionView
soluciones basadas, mi idea es:TextView
, queTextView
se completará por aplicacióncuando necesitas dibujar un
MenuItem
:2.1. diseño inflado
2.2. call
measure()
&layout()
(de lo contrarioview
será 0px x 0px, es demasiado pequeño para la mayoría de los casos de uso)2.3. establecer el
TextView
texto de2.4. hacer una "captura de pantalla" de la vista
2.6. conjunto
MenuItem
de iconos basado en mapa de bits creado en 2.4¡lucro!
entonces, el resultado debería ser algo como
@drawable/unread_background
es queTextView
el fondo verde@drawable/ic_menu_gallery
no es realmente necesario aquí, es solo para obtener una vista previa del resultado del diseño en IDE.agregar código en
onCreateOptionsMenu
/onPrepareOptionsMenu
Implemente el método build-the-icon:
El código completo está aquí: https://github.com/cvoronin/ActionBarMenuItemCounter
fuente
Ok, para que la solución @AndrewS funcione con la biblioteca v7 appCompat :
.
El resto del código es el mismo.
fuente
android:actionLayout
aapp:actionLayout
lo workes como encanto.Intente mirar las respuestas a estas preguntas, particularmente la segunda que tiene un código de muestra:
Cómo implementar valores dinámicos en el elemento del menú en Android
¿Cómo obtener texto en un icono de ActionBar?
Por lo que veo, deberás crear tu propia
ActionView
implementación personalizada . Una alternativa podría ser una costumbreDrawable
. Tenga en cuenta que no parece haber una implementación nativa de un recuento de notificaciones para la Barra de acciones.EDITAR: la respuesta que estaba buscando, con el código: Vista de notificación personalizada con implementación de muestra
fuente
Drawable
s como se ve en los siguientes dos enlaces: stackoverflow.com/questions/6691818/… y stackoverflow.com/questions/3972445/…Drawable
algo a través de algo como el enlace aquí y luego hacer un atributo para su costumbreDrawable
que tenga texto sobre él para que pueda crear todo en XML y ajústelo como desee. Alternativamente, puede agregar el Drawable en Java si esto es demasiado difícil.Cuando usas la barra de herramientas:
y en su carga de datos llame a refreshMenu ():
fuente
Encontré una muy buena solución aquí , la estoy usando con Kotlin.
Primero, en la carpeta dibujable debes crear
item_count.xml
:En su
Activity_Main
diseño, algunos como:Y puedes modificar como:
fuente
Encontré una mejor manera de hacerlo. si quieres usar algo como esto
Usa esta dependencia
cree un archivo xml en drawable y guárdelo como Badge.xml
Ahora, donde quiera usar esa insignia, use el siguiente código en xml. Con la ayuda de esto, podrá ver esa insignia en la esquina superior derecha de su imagen o cualquier cosa.
Ahora finalmente en yourFile.java use esta cosa simple 2. 1) Definir
2) donde su bucle o cualquier cosa que cuente este número use esto:
aquí,
mBadge.setNumber(0)
no mostrará nada.Espero que esto ayude.
fuente