Wyświetlam pasek przekąsek w DialogFragment w pozytywnym kliknięciu alertDialog. Oto mój fragment kodu.
Snackbar snackbar = Snackbar.make(view, "Please enter customer name", Snackbar.LENGTH_LONG)
.setAction("Action", null);
View sbView = snackbar.getView();
sbView.setBackgroundColor(Color.BLACK);
snackbar.show();
Przekazuję widok fragmentu dialogowego do snackbaru. Chcę, aby tło było czarne? W jaki sposób mogę to zrobić? Wracam alertDialog w DialogFragment. I temat, który ustawiam w oknie dialogowym, jest następujący
<style name="MyAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
<!-- Used for the buttons -->
<item name="colorAccent">@color/accent</item>
<!-- Used for the title and text -->
<item name="android:textColorPrimary">@color/primary</item>
<!-- Used for the background -->
<item name="android:background">@color/white</item>
</style>
Chociaż ustawiam kolor tła okna dialogowego na biały, powinien on zastąpić kolor tła paska przekąskowego.
Odpowiedzi:
Spróbuj ustawić kolor tła w następujący sposób:
Będzie działać w 100%!
źródło
snackBarView.getView().setBackgrondColor(ContextCompat.getColor(getActivity(), R.color.BLACK));
sbView.setBackgroundColor(getResources().getColor(R.color.BLACK))
getResources#getColor
która została wycofana od poziomu API 23 (Marshmallow) iContextCompat#getColor
powinna być używana zamiast niej.możesz to zrobić w ten sposób
źródło
Jeśli chcesz zdefiniować kolor tła dla wszystkich swoich Snackbarów, po prostu zastąp
design_snackbar_background_color
wartość gdzieś w swoich zasobach. Na przykład:źródło
Ponieważ żadna z pozostałych odpowiedzi nie zawierała niestandardowego zastąpienia stylu (uważam to za jeden z najbezpieczniejszych sposobów aktualizacji), zamieszczam tutaj moje rozwiązanie.
Publikuję rozwiązanie, które już dotyczy nowego motywu
AndroidX
(support design 28
).Pod warunkiem, że aplikacja używa niestandardowych nazw nazwanych
MyAppTheme
wAndroidManifest.xml
:Utwórz (jeśli jeszcze tego nie zrobiłeś)
values/style.xml
plik nadpisujący motyw używany przez twoją aplikację:i podaj swoje kolory w
values/colors.xml
plikuUPDATE 2020
Ponieważ powyższe rozwiązanie usuwa okrągły narożnik przekąski, ponieważ ustawienie tła w ten sposób wykorzystuje starszą konstrukcję batonika, jeśli chcesz zachować materiał konstrukcyjny, który możesz.
wymienić
android:background
zandroid:backgroundTint
Jeśli celujesz
MySnackbarStyle
w API <21, to jeśli zdecydujesz się użyć starszego snackbaru dla API <21, możesz ustawić abouve w folderze res / values-21 / i pozostawić poprzedni - starszy - styl w folderze res / values .Jeśli celujesz w API <21 i chcesz, aby materiałowy styl batonika również był na niższych poziomach API, możesz zmienić styl snackbaru w swoich res / values / w ten sposób:
i pożycz
my_snackbar_background
z oficjalnego repozytorium w ten sposób:Oto repozytorium placu zabaw .
źródło
my_snackbar_background
. Bez tego Snackbar rysował zaokrąglonymi rogami.Wersja Kotlin (z rozszerzeniem ):
Utwórz w pliku (na przykład SnackbarExtension.kt) rozszerzenie:
Następnie w swojej aktywności / fragmencie będziesz mógł to zrobić:
źródło
Poniższy kod jest przydatny do zmiany koloru tekstu wiadomości.
Drugi sposób: Możesz zmienić kolor, zmieniając również motyw aktywności.
źródło
Za późno, ale na wypadek, gdyby ktoś nadal potrzebował pomocy. Oto działające rozwiązanie.
źródło
Podczas pracy z Xamarin Android dowiedziałem się, że ContextCompat.GetColor () zwraca Int, ale setBackgroundColor () oczekuje parametru typu Color. Oto, jak to działa w moim projekcie Xamarin Android.
źródło
View snckView = snackbarview.View;
zamiast tegosnackbar.getView();
nie jest dostępny, aleParseColor
nie działa.System.Drawing.Color.ParseColor
zamiastAndroid.Graphics.Color.ParseColor
. teraz mam: „nazwa 'getstring' nie istnieje w obecnym kontekście”Z zawartością
Snackbar
w Bibliotece komponentów materiałów(com.google.android.material.snackbar.Snackbar
) wystarczy użyć tejsetBackgroundTint
metody.źródło
Zrobiłem małą klasę narzędzi, dzięki czemu mogę łatwo tworzyć niestandardowe kolorowe przekąski w aplikacji.
następnie użyć go, na przykład w dowolnym miejscu w aplikacji:
źródło
Umieść to w klasie Utility:
Używanie w ten sposób:
źródło
Zasadniczo dostarczone rozwiązania mają jedną wadę. Zmieniają kształt batonika i usuwają promień.
Osobiście wolę coś takiego
źródło
Żadne z innych rozwiązań tak naprawdę dla mnie nie zadziałało. Jeśli ustawię tylko kolor tła Snackbar, układ pod TextView i Button miał domyślny kolor. Jeśli ustawiłem tło TextView, po wyświetleniu SnackBar trochę zamrugało. A układ wokół przycisku był nadal w domyślnym kolorze.
Na koniec dowiedziałem się, że najlepszym sposobem jest dla mnie zmiana koloru tła rodzica TextView (SnackbarContentLayout). Teraz cały Snackbar jest odpowiednio pokolorowany i nie mruga, gdy się pojawia.
źródło
setBackgroundResource()
działa równie dobrze.źródło
Nie wiem, dlaczego setBackgroundColor () nie znalazł się w moim projekcie. Dlatego stworzyłem funkcję rozszerzenia i teraz jest w porządku.
i nazwij to jak poniżej
activity_login.xml
LoginActivity.kt
źródło
}
źródło