如何在Android上以编程方式设置setBackgroundColor attr:color /

时间:2019-02-25 11:59:35

标签: android colors styles themes attr

虽然我可以使用

在RecyclerView.Adapter内为布局设置自定义颜色
viewHolder.mLayout.setBackgroundColor(ContextCompat.getColor(context,R.color.color_theme_1));

我无法设置以下代码

viewHolder.mLayout.setBackgroundColor(R.attr.colorLayoutBackground);

OR

viewHolder.mLayout.setBackgroundColor(ContextCompat.getColor(context,R.attr.colorLayoutBackground));

使用attr:color值。我在做什么错了?

我当前的代码如下--attrs.xml

    </resources>
  <!-- Color -->
    <attr name="colorLayoutBackground" format="color"/>
   </resources>

colors.xml

    <!-- Theme One Color -->
<color name="color_theme_1">#F8BBD0</color>
    <!-- Theme Two Color -->
<color name="color_theme_2">#C8E6C9</color>

styles.xml

<style name="AppTheme.Base.Light"
    parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Theme One -->
    <item name="colorLayoutBackground">@color/color_theme_1</item>
</style>
<style name="AppTheme.Base.Light"
    parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Theme Two -->
    <item name="colorLayoutBackground">@color/color_theme_2</item>
</style>

我想在主题更改时(使用recycleView)在一个列表项上动态设置两组颜色为Linear_Layout,但主题无法更改。

当未应用主题时,以下代码有效,并且列表上的每个项目都得到三种不同的颜色。

if(position % 3 == 0){
                viewHolder.mLayout.setBackgroundColor(ContextCompat.getColor(context,R.color.color_one));
            }else if(position % 3 == 1){
                viewHolder.mLayout.setBackgroundColor(ContextCompat.getColor(context,R.color.color_two));
            }else if(position % 3 == 2){
                viewHolder.mLayout.setBackgroundColor(ContextCompat.getColor(context,R.color.color_three));
            }

我想通过主题添加另一组颜色,并在更改主题时进行更改。 任何/所有帮助和建议都将不胜感激。

0 个答案:

没有答案