【发布时间】:2015-09-12 17:12:05
【问题描述】:
所以我开始在设计支持库中使用新的 Snackbar,但我发现当您在主题中定义“android:textColor”时,它适用于小吃栏的文本颜色。如果您的主要文本颜色较暗,这显然是一个问题。
有没有人知道解决这个问题的方法或对我应该如何为文本着色提供建议?
2017 年 1 月编辑:(回复后)
虽然有一些自定义解决方案可以解决以下问题,但提供正确的 Snackbars 主题方法可能会很好。
首先,您可能根本不应该在主题中定义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 布局,请参阅上面的链接。如果这种方法感觉太老套,并且您希望通过可能的支持库更新让您的自定义 Snackbar 保持可靠的方式,请这样做)。
另外,请参阅下面的答案以获得类似且可能更快的答案来解决您的问题。
【问题讨论】:
-
感谢您的解决方案!该属性实际上称为
android:textColorPrimary -
感谢您的全面解释。
-
“你可能根本不应该在你的主题中定义 android:textColor...”这对我来说是关键,谢谢!
标签: android android-support-library android-design-library android-snackbar snackbar