我在DialogFragment中显示snackbar在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();
我正在将对话片段的视图传递给快餐栏.我想要背景颜色为黑色?我怎样才能做到这一点?我在DialogFragment中返回alertDialog.我正在设置对话框的主题如下
虽然我将背景颜色设置为白色以进行对话,但是应该通过将背景颜色设置为快餐栏来覆盖它.
尝试设置背景颜色如下:
sbView.setBackgroundColor(ContextCompat.getColor(getActivity(), R.color.BLACK));
它将100%工作!
你可以这样做
Snackbar snackbar; snackbar = Snackbar.make(view, "Message", Snackbar.LENGTH_SHORT); View snackBarView = snackbar.getView(); snackBarView.setBackgroundColor(yourColor); TextView textView = (TextView) snackBarView.findViewById(android.support.design.R.id.snackbar_text); textView.setTextColor(textColor); snackbar.show();
如果要为所有Snackbars定义背景颜色,只需覆盖design_snackbar_background_color
资源中的某个值即可.例如:
@color/colorPrimaryLight
Bellow代码对于更改消息的文本颜色很有用.
Snackbar snackbar = Snackbar.make(rootView, "Enter Your Message",Snackbar.LENGTH_SHORT); View view = snackbar.getView(); TextView tv = (TextView)view.findViewById(android.support.design.R.id.snackbar_text); tv.setTextColor(Color.RED); snackbar.show();
第二种方式:您也可以通过改变活动主题来改变颜色.
Kotlin版(带扩展名):
在文件中创建(例如SnackbarExtension.kt)扩展名:
fun Snackbar.withColor(@ColorInt colorInt: Int): Snackbar{ this.view.setBackgroundColor(colorInt) return this }
接下来,在您的Activity/Fragment中,您将能够执行此操作:
Snackbar .make(coordinatorLayout, message, Snackbar.LENGTH_LONG) .withColor(YOUR_COLOR) .show()
由于没有其他答案提供自定义样式覆盖(我认为这样做是更安全的更新方式之一),因此我在此处发布了解决方案。
我发布了一个已经解决了新AndroidX
(support design 28
)主题的解决方案。
前提是你的应用程序中使用自定义它们卡莱MyAppTheme
在AndroidManifest.xml
:
创建(如果还没有)values/style.xml
覆盖应用程序使用的主题的文件:
并在values/colors.xml
文件中提供颜色
#008577 #00574B #D81B60 #D81B60
现在为时已晚,万一有人仍然需要帮助.这是工作解决方案.
Snackbar snackbar = Snackbar.make(mainView, text, Snackbar.LENGTH_LONG); View snackBarView = snackbar.getView(); snackBarView.setBackgroundColor(context.getResources().getColor(R.color.btn_background_color)); snackbar.show();