场景:我创建了一个应用程序,可以在明暗模式之间以编程方式切换主题。它基于片段,我通过XML调用设置每个视图"?attr / mytextcolor"这叫我的风格:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="mytextcolor">#2196F3</item>
.......
<style name="darktheme" parent="Theme.AppCompat.NoActionBar">
<item name="mytextcolor">#212121</item>
.......
现在我插入了一个MPPieChart,我想根据所选主题更改textcolor。 我认为这就像
l.setTextColor(R.attr.mytextcolor);
但它没有做出任何改变...... 我究竟做错了什么? 或者,我想改变它调用getTheme并找到应用了哪个主题...我发现了一些关于反射的内容,但我不知道如何应用于片段
int getThemeId() {
try {
Class<?> wrapper = Context.class;
Method method = wrapper.getMethod("getThemeResId");
method.setAccessible(true);
return (Integer) method.invoke(this);
} catch (Exception e) {
e.printStackTrace();
}
return 0;
有人能指出我的代码中的错误吗?还是更好的解决方案?
提前致谢 亚历
答案 0 :(得分:0)
最后,我以这种方式解决了我的问题:
System.Runtime.CompilerServices.ReferenceAssemblyAttribute
答案 1 :(得分:0)
我的解决方案: 发送到图表类“requireContext()”
chartClass(linechart,requireContext())
在图表类中
var color = ContextCompat.getColor(context, R.color.black)
when (context.resources?.configuration?.uiMode?.and(Configuration.UI_MODE_NIGHT_MASK)) {
Configuration.UI_MODE_NIGHT_YES -> { color = ContextCompat.getColor(context, R.color.white)}
Configuration.UI_MODE_NIGHT_NO -> {color = ContextCompat.getColor(context, R.color.black)}
Configuration.UI_MODE_NIGHT_UNDEFINED -> {color = ContextCompat.getColor(context, R.color.black)}
}