我有一个使用SurfaceView
绘制图形的应用程序。我希望表面视图的颜色(背景,轴等)与当前主题相匹配,所以我的想法是使用默认的窗口背景色作为背景,并使用默认的文本色作为轴。
使用this SO answer,如果我在Theme.AppCompat.Light.NoActionBar
和Theme.AppCompat.NoActionBar
之间更改主题(或可能拥有将其用作父主题的主题),则可以很好地获取窗口背景正确更改。
但是,我尝试重复此操作以获取文本颜色,但它不起作用:
a = new TypedValue();
context.getTheme().resolveAttribute(android.R.attr.windowBackground, a, true);
if (a.type >= TypedValue.TYPE_FIRST_COLOR_INT && a.type <= TypedValue.TYPE_LAST_COLOR_INT) {
backgroundColor = a.data;
} else {
Log.d("Graph","Window color is not a color");
}
TypedValue a = new TypedValue();
context.getTheme().resolveAttribute(android.R.attr.textColor, a, true);
if (a.type >= TypedValue.TYPE_FIRST_COLOR_INT && a.type <= TypedValue.TYPE_LAST_COLOR_INT) {
labelColor = a.data;
} else {
Log.d("Graph","Text color is not a color");
}
我猜这是因为我使用了错误的属性,但我无法弄清楚正确的属性是什么-the docs中的textColor似乎合适,并且我尝试了一些其他类似的。这是正确的方法吗?并且有一种更容易的方法来了解哪些属性与主题中的属性相对应吗?