我已经开始使用设计支持库中的新Snackbar,但是我发现当你在主题中定义了"android:textColor"时,它会应用于Snackbar的文本颜色。如果你的主要文本颜色是暗色,这显然是一个问题。
有人知道如何解决这个问题或者有什么建议可以让我的文本变色吗?
2017年1月编辑:(回答后)
虽然有一些自定义解决方案可以解决下面的问题,但最好提供正确的方法来主题化 Snackbar。
首先,你可能根本不应该在主题中定义 android:textColor
(除非你真正了解使用主题的范围)。这会设置与你的主题连接的基本上每个视图的文本颜色。如果你想在视图中定义非默认的文本颜色,则使用android:primaryTextColor
并在你的自定义视图中引用该属性。
然而,要将主题应用于 Snackbar
,请参考第三方材料文档中的这个优质指南:http://www.materialdoc.com/snackbar/ (遵循编程主题实现,使其不依赖于 xml 样式)
供参考:
// create instance
Snackbar snackbar = Snackbar.make(view, text, duration);
// set action button color
snackbar.setActionTextColor(getResources().getColor(R.color.indigo));
// get snackbar view
View snackbarView = snackbar.getView();
// change snackbar text color
int snackbarTextId = android.support.design.R.id.snackbar_text;
TextView textView = (TextView)snackbarView.findViewById(snackbarTextId);
textView.setTextColor(getResources().getColor(R.color.indigo));
// change snackbar background
snackbarView.setBackgroundColor(Color.MAGENTA);
你也可以创建自己的自定义 Snackbar 布局,详见上面的链接。如果这种方法感觉太过 hacky,并且你想要一个确保可靠的方式来让你的自定义 Snackbar 在可能的支持库更新中保持不变,请这样做。此外,查看下面的答案,以了解类似且可能更快地解决问题的方法。
android:textColorPrimary
。 - muetzenflo