因此,我开始在设计支持库中使用新的 Snackbar,但我发现当您在主题中定义“android:textColor”时,它会应用于 Snackbar 的文本颜色。如果您的主要文本颜色是深色,这显然是一个问题。
有谁知道解决这个问题的方法或者对我应该如何为文本着色有建议?
2017 年 1 月编辑:(答复后)
虽然有一些自定义解决方案可以解决以下问题,但提供主题 Snackbars 的正确方法可能会更好。
首先,你可能不应该定义android:textColor
完全在你的主题中(除非你真的知道使用该主题的范围)。这设置了与您的主题相关的基本上每个视图的文本颜色。如果您想在视图中定义非默认的文本颜色,请使用android:primaryTextColor
并在您的自定义视图中引用该属性。
但是,要将主题应用到Snackbar
,请参考第三方材料文档的质量指南:http://www.materialdoc.com/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 Design Support Library 有哪些新功能以及如何使用它的 Snackbar? https://stackoverflow.com/questions/30520625/what-is-new-features-of-android-design-support-library-and-how-to-use-its-snackb?rq=1
这对我来说可以改变 Snackbar 中的文本颜色。
Snackbar snack = Snackbar.make(view, R.string.message, Snackbar.LENGTH_LONG);
View view = snack.getView();
TextView tv = (TextView) view.findViewById(android.support.design.R.id.snackbar_text);
tv.setTextColor(Color.WHITE);
snack.show();
更新:安卓:正如 dblackker 在评论中指出的那样,使用新的 AndroidX 支持库,查找 Snackbar TextView ID 的代码更改为:
TextView tv = view.findViewById(com.google.android.material.R.id.snackbar_text);
tv.setTextColor(ContextCompat.getColor(requireContext(), R.color.someColor))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)