Существует ли стандартный значок или метод Android для отображения значка уведомления на панели действий со счетчиком, как в примерах Google?
Если нет, то как лучше это сделать?
Я новичок в Android, пожалуйста, помогите.
Существует ли стандартный значок или метод Android для отображения значка уведомления на панели действий со счетчиком, как в примерах Google?
Если нет, то как лучше это сделать?
Я новичок в Android, пожалуйста, помогите.
Ответы:
Я не уверен, что это лучшее решение или нет, но это то, что мне нужно.
Пожалуйста, скажите мне, если вы знаете, что нужно изменить для лучшей производительности или качества. В моем случае у меня есть кнопка.
Пользовательский пункт в моем меню - main.xml
Возможность рисования произвольной формы (квадрат фона) - shape_notification.xml
Макет для моего представления - feed_update_count.xml
MainActivity - настройка и обновление моего вида
источник
MenuItem item = menu.findItem(R.id.badge); MenuItemCompat.setActionView(item, R.layout.feed_update_count); notifCount = (Button) MenuItemCompat.getActionView(item);
android:icon="..."
в элементе меню XML. Тамandroid:actionLayout="..."
достаточно. ДляButton
XML в макете вы можете использовать самозакрывающийся тег,<Button ... />
поскольку у тега не может быть содержимого. Вам необходимо закрыть<shape>
тег (снова: самозакрытие). И тебе не нужноinvalidateOptionsMenu()
. Для меня это даже не работает, так как значок всегда снова раздувается из XML. Итак, всеsetNotifCount(...)
бесполезно. Просто позвониsetText(...)
на значок. И вы можете привестиgetActionView()
кButton
прямо.Редактировать Начиная с версии 26 библиотеки поддержки (или androidx) вам больше не нужно реализовывать кастом
OnLongClickListener
для отображения всплывающей подсказки. Просто назовите это:Я просто поделюсь своим кодом на случай, если кто-то захочет что-то вроде этого:
Макет / меню / menu_actionbar.xml
макет / action_bar_notifitcation_icon.xml
Примечание стиль и Android: кликабельные свойства. они делают макет размером с кнопку и делают серый фон при касании.
Drawable-xhdpi / ic_bell.png
Изображение 64x64 пикселей с отступами шириной 10 пикселей со всех сторон. Предполагается, что у вас есть отступы шириной 8 пикселей, но я считаю, что большинство элементов по умолчанию немного меньше этого. Конечно, вы захотите использовать разные размеры для разных плотностей.
рисуем / rounded_square.xml
Здесь, # ff222222 (цвет # 222222 с альфа #ff (полностью видимым)) является цветом фона моей панели действий.
ком / ubergeek42 / WeechatAndroid / WeechatActivity.java
Здесь мы делаем его кликабельным и обновляемым! Я создал абстрактный слушатель, который обеспечивает создание Toast на onLongClick, код был взят из источников ActionBarSherlock .
источник
app:actionLayout="@layout/action_bar_notifitcation_icon"
вместо,android:actionLayout="@layout/action_bar_notifitcation_icon"
если вы должны использоватьMenuItemCompat.getActionView
вместо проблемmenu.findItem(R.id.menu_hotlist).getActionView();
совместимости.MenuItem.getActionView
несовместим с уровнем API <11.android:actionLayout
:; AppCompat:app:actionLayout
в вашем пункте меню.Просто чтобы добавить. Если кто-то хочет реализовать заполненный кружок, вот код (назовите его
bage_circle.xml
):Возможно, вам придется отрегулировать толщину в соответствии с вашими потребностями.
РЕДАКТИРОВАТЬ: Вот макет для кнопки (назовите его
badge_layout.xml
):В меню создайте пункт:
В
onCreateOptionsMenu
ссылке получить пункт меню:После получения уведомления о сообщениях установите количество:
Этот код использует Iconify-fontawesome .
источник
Я не люблю
ActionView
основанные решения, моя идея:TextView
, которыйTextView
будет заполнен приложениемкогда вам нужно нарисовать
MenuItem
:2.1. раздувать макет
2.2. вызвать
measure()
&layout()
(в противном случаеview
будет 0px x 0px, это слишком мало для большинства случаев использования)2,3. установить
TextView
текст2,4. сделать "скриншот" вида
2.6.
MenuItem
значок набора на основе растрового изображения, созданного в версии 2.4прибыль!
итак, результат должен быть примерно таким
@drawable/unread_background
в том, чтоTextView
фон зеленого , на@drawable/ic_menu_gallery
самом деле здесь не требуется, это просто предварительный просмотр результата макета в IDE.добавить код в
onCreateOptionsMenu
/onPrepareOptionsMenu
Реализуйте метод build-the-icon:
Полный код здесь: https://github.com/cvoronin/ActionBarMenuItemCounter
источник
Хорошо, чтобы решение @AndrewS работало с библиотекой appCompat версии 7 :
,
Остальной код такой же.
источник
android:actionLayout
наapp:actionLayout
него, он работает как шарм.Попробуйте посмотреть на ответы на эти вопросы, особенно на второй, который содержит пример кода:
Как реализовать динамические значения в пункте меню в Android
Как получить текст на значке ActionBar?
Из того, что я вижу, вам нужно будет создать свою собственную
ActionView
реализацию. Альтернативой может быть обычайDrawable
. Обратите внимание, что, по-видимому, нет собственной реализации счетчика уведомлений для панели действий.РЕДАКТИРОВАТЬ: Ответ, который вы искали, с кодом: Custom Notification View с примером реализации
источник
Drawable
s, как показано в следующих двух ссылках: stackoverflow.com/questions/6691818/… и stackoverflow.com/questions/3972445/…Drawable
сквозной ссылки, например, здесь, а затем создать атрибут для своего пользовательскогоDrawable
текста с текстом поверх него, чтобы вы могли создать все это в XML и поместите его, как вы хотели. Кроме того, вы можете добавить Drawable в Java, если это слишком сложно.Когда вы используете панель инструментов:
и в ваших данных загрузки вызовите refreshMenu ():
источник
Я нашел очень хорошее решение здесь , я использую его с kotlin.
Сначала в папке drawable вы должны создать
item_count.xml
:В вашем
Activity_Main
макете некоторые как:И вы можете изменить как:
источник
Я нашел лучший способ сделать это. если вы хотите использовать что-то вроде этого
Используйте эту зависимость
создайте один XML-файл в Drawable и сохраните его как Badge.xml
Теперь везде, где вы хотите использовать этот значок, используйте следующий код в XML. с помощью этого вы сможете увидеть этот значок в правом верхнем углу вашего изображения или что-нибудь еще.
Теперь, наконец, на yourFile.java используйте эту 2 простую вещь .. 1) Определите
2) где ваш цикл или все, что считает это число, использует это:
здесь
mBadge.setNumber(0)
ничего не покажу.Надеюсь, это поможет.
источник