Как добавить значок с цифрой (Badge) на элемент меню в Toolbar?

Дано:

Toolbar c элементом меню.

Задача:

Добавить кружок с числом. Например для отображения кол-ва покупок в корзине или кол-ва сообщений каких-то.

Вопрос:

Таки как это сделать?


Ответы (1 шт):

Автор решения: ЮрийСПб

Эту фичу (эксперементально!) добавили в версии 1.3.0-alpha04 библиотеки com.google.android.material:material:${materialVersion}

Пользоваться можно так:

  1. Подключаем нужную версию либы:
    implementation "com.google.android.material:material:${materialVersion}"

  2. В случае, если меню из фрагмента отображаем, пишем в методе onCreateOptionsMenu

     @SuppressLint("UnsafeExperimentalUsageError")
     override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
         inflater.inflate(R.menu.YOUR_MENU_RESOURSE, menu)
    
         val badgeDrawable = BadgeDrawable.create(requireContext())
         badgeDrawable.number = 5
         badgeDrawable.backgroundColor = ContextCompat.getColor(requireContext(), R.color.SOME_COLOR_HERE)
         badgeDrawable.badgeTextColor = ContextCompat.getColor(requireContext(), R.color.SOME_COLOR_HERE)
         badgeDrawable.badgeGravity = BadgeDrawable.TOP_END
         BadgeUtils.attachBadgeDrawable(badgeDrawable, REFERENCE_TO_TOOLBAR, R.id.MENU_ITEM_ID_HERE)
    
         super.onCreateOptionsMenu(menu, inflater)
     }
    
  3. Т.к. фича экспериментальная, требуется аннотация над методом, где мы это делаем:
    @SuppressLint("UnsafeExperimentalUsageError")

Результат:

введите сюда описание изображения

→ Ссылка