根据选择的主题更改MPPieChart图例文本颜色

时间:2018-01-10 13:55:38

标签: android android-fragments mpandroidchart legend-properties

场景:我创建了一个应用程序,可以在明暗模式之间以编程方式切换主题。它基于片段,我通过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;

有人能指出我的代码中的错误吗?还是更好的解决方案?

提前致谢 亚历

2 个答案:

答案 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)}
    }