Я показываю снэк-бар в DialogFragment при положительном нажатии на alertDialog. Вот мой фрагмент кода.
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();
Я передаю просмотр фрагмента диалога на панель закусок. Я хочу черный цвет фона? Как я могу это сделать? Я возвращаю alertDialog в DialogFragment. И тема, которую я устанавливаю для диалога, следующая
<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>
Хотя я устанавливаю белый цвет фона для диалога, он должен переопределить, установив цвет фона для закусочной.
Ответы:
Попробуйте установить цвет фона следующим образом:
Будет работать на все 100%!
источник
snackBarView.getView().setBackgrondColor(ContextCompat.getColor(getActivity(), R.color.BLACK));
sbView.setBackgroundColor(getResources().getColor(R.color.BLACK))
getResources#getColor
он устарел с уровня API 23 (Marshmallow) иContextCompat#getColor
должен использоваться вместо него.ты можешь сделать это вот так
источник
Если вы хотите определить цвет фона для всех ваших Snackbar, просто переопределите
design_snackbar_background_color
значение где-нибудь в ваших ресурсах. Например:источник
Поскольку ни в одном из других ответов не было переопределения пользовательского стиля (что я считаю одним из самых безопасных способов обновления для этого), я публикую здесь свое решение.
Я публикую решение, которое уже касается темы new
AndroidX
(support design 28
).При условии, что ваше приложение использует настраиваемые им, которые называются
MyAppTheme
в вашемAndroidManifest.xml
:Создайте (если вы еще этого не сделали)
values/style.xml
файл, заменяющий тему, используемую вашим приложением:и укажите свои цвета в своем
values/colors.xml
файлеОБНОВЛЕНИЕ 2020
Поскольку в приведенном выше решении убирается круглый угол закусочной, так как при установке фона таким образом используется устаревший дизайн закусочной, если вы хотите сохранить материальный дизайн, вы можете.
заменить
android:background
наandroid:backgroundTint
Если вы ориентируетесь на API <21, тогда, если вы решите использовать устаревшую панель закусок для API <21, вы можете установить свой abouve
MySnackbarStyle
в папке res / values-21 / и оставить предыдущий - устаревший - стиль в папке res / values .Если вы ориентируетесь на API <21 и хотите иметь стиль материала закусочной панели также на этих более низких уровнях API, вы можете изменить стиль закусочной панели в своем res / values / следующим образом:
и заимствуйте свой
my_snackbar_background
из официального репо следующим образом:Вот репо на детской площадке .
источник
my_snackbar_background
. Без него Snackbar получился с более закругленными углами.Версия Kotlin (с расширением ):
Создайте в файле (например, SnackbarExtension.kt) расширение:
Затем в своем Activity / Fragment вы сможете сделать это:
источник
Нижний код полезен для изменения цвета текста сообщения.
Второй способ: вы можете изменить цвет, также изменив тему деятельности.
источник
Слишком поздно, но на случай, если кому-то все еще понадобится помощь. Вот рабочее решение.
источник
Работая с xamarin android, я обнаружил, что ContextCompat.GetColor () возвращает Int, но setBackgroundColor () ожидает параметр типа Color. Итак, вот как я заставил его работать в моем проекте xamarin android.
источник
View snckView = snackbarview.View;
вместоsnackbar.getView();
которого недоступен, ноParseColor
не работает.System.Drawing.Color.ParseColor
вместоAndroid.Graphics.Color.ParseColor
. теперь у меня есть: «имя getstring не существует в текущем контексте»С
Snackbar
включенным в библиотеку компонентов материалов(com.google.android.material.snackbar.Snackbar
) просто используйтеsetBackgroundTint
метод.источник
Я сделал небольшой класс утилит, чтобы я мог легко создавать собственные цветные закуски прямо из приложения.
затем использовать его, например, в любом месте приложения:
источник
Поместите его в служебный класс:
Используя вот так:
источник
В принципе, предложенные решения имеют один недостаток. Они меняют форму закусочной и убирают радиус.
Лично предпочитаю что-то подобное
источник
Ни одно другое решение не помогло мне. Если я установил только цвет фона Snackbar, макет в TextView и Button был в цвете по умолчанию. Если я установил фон TextView, он немного мигал после отображения SnackBar. А расположение вокруг кнопки все еще было в цвете по умолчанию.
В конце я обнаружил, что лучший способ для меня - изменить цвет фона родительского элемента TextView (SnackbarContentLayout). Теперь вся Snackbar правильно окрашена и не мигает, когда появляется.
источник
setBackgroundResource()
работает так же хорошо.источник
Я не знаю, почему setBackgroundColor () не нашел в моем проекте. Вот почему я создал функцию расширения, и теперь все в порядке.
и назовите это как ниже
activity_login.xml
LoginActivity.kt
источник
}
источник