Czy istnieje standardowa plakietka Androida lub metoda wyświetlania ikony powiadomień na pasku działań z liczbą, jak na przykładach Google?
Jeśli nie, to jaki jest najlepszy sposób, aby to zrobić?
Jestem nowy w Androidzie, proszę o pomoc.
Czy istnieje standardowa plakietka Androida lub metoda wyświetlania ikony powiadomień na pasku działań z liczbą, jak na przykładach Google?
Jeśli nie, to jaki jest najlepszy sposób, aby to zrobić?
Jestem nowy w Androidzie, proszę o pomoc.
Odpowiedzi:
Nie jestem pewien, czy to najlepsze rozwiązanie, czy nie, ale tego potrzebuję.
Powiedz mi, jeśli wiesz, co należy zmienić, aby uzyskać lepszą wydajność lub jakość. W moim przypadku mam przycisk.
Niestandardowa pozycja w moim menu - main.xml
Niestandardowy kształt do rysowania (kwadrat tła) - shape_notification.xml
Układ dla mojego widoku - feed_update_count.xml
MainActivity - ustawianie i aktualizowanie mojego widoku
źródło
MenuItem item = menu.findItem(R.id.badge); MenuItemCompat.setActionView(item, R.layout.feed_update_count); notifCount = (Button) MenuItemCompat.getActionView(item);
android:icon="..."
XML w pozycji menu.android:actionLayout="..."
Wystarczy, tam. W przypadkuButton
kodu XML układu można użyć samozamykającego się znacznika,<Button ... />
ponieważ znacznik nie może mieć treści. Musisz zamknąć<shape>
tag (ponownie: samozamykanie). I nie potrzebujeszinvalidateOptionsMenu()
. Dla mnie to nawet nie działa, ponieważ plakietka jest zawsze ponownie zawyżana z XML. A więc całośćsetNotifCount(...)
jest bezużyteczna. Wystarczy zadzwonićsetText(...)
na odznakę. Możesz też przesyłać bezpośredniogetActionView()
doButton
.Edycja Od wersji 26 biblioteki obsługi (lub systemu Androidx) nie trzeba już implementować niestandardowego sposobu
OnLongClickListener
wyświetlania podpowiedzi. Po prostu nazwij to:Po prostu udostępnię swój kod na wypadek, gdyby ktoś chciał coś takiego:
układ / menu / menu_actionbar.xml
układ / action_bar_notifitcation_icon.xml
Styl notatki i Android: klikalne właściwości. Dzięki temu układ ma rozmiar przycisku, a po dotknięciu tło jest szare.
drawable-xhdpi / ic_bell.png
Obraz 64x64 piksele z 10-pikselowymi wypełnieniami ze wszystkich stron. Powinieneś mieć wypełnienie o szerokości 8 pikseli, ale uważam, że większość domyślnych elementów jest nieco mniejsza. Oczywiście będziesz chciał użyć różnych rozmiarów dla różnych gęstości.
drawable / rounded_square.xml
Tutaj # ff222222 (kolor # 222222 z alfa #ff (w pełni widoczny)) jest kolorem tła mojego paska akcji.
com / ubergeek42 / WeechatAndroid / WeechatActivity.java
Tutaj sprawiamy, że jest klikalny i aktualizowany! Stworzyłem abstrakcyjny detektor, który zapewnia tworzenie Toast na onLongClick, kod został pobrany ze źródeł ActionBarSherlock .
źródło
app:actionLayout="@layout/action_bar_notifitcation_icon"
zamiast,android:actionLayout="@layout/action_bar_notifitcation_icon"
jeśli chcesz używaćMenuItemCompat.getActionView
zamiast wmenu.findItem(R.id.menu_hotlist).getActionView();
przypadku problemów ze zgodnością.MenuItem.getActionView
nie jest kompatybilny z poziomem API <11.android:actionLayout
; AppCompat:app:actionLayout
w pozycji menu.Wystarczy dodać. Jeśli ktoś chce zaimplementować bąbelek wypełniony kółkiem, oto kod (nazwij go
bage_circle.xml
):Konieczne może być dostosowanie grubości w zależności od potrzeb.
EDYCJA: Oto układ przycisku (nazwij go
badge_layout.xml
):W menu utwórz element:
W celu
onCreateOptionsMenu
uzyskania odniesienia do pozycji menu:Po otrzymaniu powiadomienia o wiadomościach ustaw licznik:
Ten kod używa Iconify-fontawesome .
źródło
Nie lubię
ActionView
rozwiązań opartych na rozwiązaniach, mój pomysł to:TextView
, któryTextView
zostanie wypełniony przez aplikacjękiedy musisz narysować
MenuItem
:2.1. nadmuchać układ
2.2. call
measure()
&layout()
(w przeciwnym razieview
będzie to 0px x 0px, jest za mały dla większości przypadków użycia)2.3. ustawić
TextView
tekst2.4. zrobić „zrzut ekranu” widoku
2.6.
MenuItem
ikona zestawu oparta na bitmapie utworzonej w wersji 2.4zysk!
więc wynik powinien być podobny
@drawable/unread_background
jest to, że zieloneTextView
tło@drawable/ic_menu_gallery
nie jest tutaj wymagane , służy tylko do podglądu wyniku układu w IDE.dodaj kod do
onCreateOptionsMenu
/onPrepareOptionsMenu
Zaimplementuj metodę build-the-icon:
Pełny kod jest tutaj: https://github.com/cvoronin/ActionBarMenuItemCounter
źródło
Ok, aby rozwiązanie @AndrewS działało z biblioteką appCompat w wersji 7 :
.
Reszta kodu jest taka sama.
źródło
android:actionLayout
naapp:actionLayout
to działa jak urok.Spróbuj spojrzeć na odpowiedzi na te pytania, szczególnie na drugie, które zawiera przykładowy kod:
Jak zaimplementować wartości dynamiczne w elemencie menu w systemie Android
Jak uzyskać tekst na ikonie ActionBar?
Z tego, co widzę, musisz stworzyć własną niestandardową
ActionView
implementację. Alternatywą może być zwyczajDrawable
. Zauważ, że wydaje się, że nie ma natywnej implementacji liczby powiadomień dla paska akcji.EDYCJA: Odpowiedź, której szukałeś, z kodem: Niestandardowy widok powiadomień z przykładową implementacją
źródło
Drawable
s, jak widać w następujących dwóch linkach: stackoverflow.com/questions/6691818/ ... i stackoverflow.com/questions/3972445/ ...Drawable
za pomocą czegoś takiego jak link tutaj, a następnie utworzyć atrybut dla swojego niestandardowego,Drawable
który ma nadpisany tekst, abyś mógł stworzyć całość w formacie XML i dopasuj go tak, jak chcesz. Alternatywnie możesz dodać Drawable w Javie, jeśli jest to zbyt trudne.Podczas korzystania z paska narzędzi:
oraz w wywołaniu danych ładowania refreshMenu ():
źródło
Znalazłem bardzo dobre rozwiązanie tutaj , używam go z Kotlin.
Najpierw w folderze do rysowania musisz utworzyć
item_count.xml
:W Twoim
Activity_Main
układzie niektóre z nich:I możesz modyfikować jak:
źródło
Znalazłem lepszy sposób na zrobienie tego. jeśli chcesz użyć czegoś takiego
Użyj tej zależności
utwórz jeden plik xml do rysowania i zapisz go jako Badge.xml
Teraz, gdziekolwiek chcesz użyć tej plakietki, użyj następującego kodu w XML. dzięki temu będziesz mógł zobaczyć tę odznakę w prawym górnym rogu swojego obrazu lub cokolwiek innego.
Teraz w końcu na yourFile.java użyj dwóch prostych rzeczy: 1) Zdefiniuj
2) gdzie twoja pętla lub cokolwiek, co liczy tę liczbę, używa tego:
tutaj
mBadge.setNumber(0)
nic nie pokaże.Mam nadzieję, że to pomoże.
źródło