如何以编程方式从字符串设置布局背景色调?
Posted
技术标签:
【中文标题】如何以编程方式从字符串设置布局背景色调?【英文标题】:How to set layout background tint from string programmatically? 【发布时间】:2018-05-29 23:10:54 【问题描述】:我试过这段代码:
LinearLayout someLayout=(LinearLayout)view.findViewById(R.id.someLayout);
someLayout.setBackgroundTintList(context.getResources().getColorStateList(Color.parseColor("#ff8800")));
但我收到一个错误:android.content.res.Resources$NotFoundException
我从外部源获取颜色十六进制,因此无法将其嵌入到 colors.xml 中。
另外我想改变色调,而不是背景,所以 setBackground 不是一个选项。
【问题讨论】:
How do I create ColorStateList programmatically?的可能重复 “可能重复”的意思是“如果你知道如何做到这一点,那么你就知道如何解决你的问题” 【参考方案1】:我想我不能使用 getColorStateList() 所以我寻找另一种方法来做到这一点。 最后,我可以使用以下代码设置颜色:
LinearLayout someLayout=(LinearLayout)view.findViewById(R.id.someLayout);
someLayout.getBackground().setColorFilter(Color.parseColor("#ff8800"), PorterDuff.Mode.SRC_ATOP);
这就像我更改了 xml 文件中的 backgroundTint 属性一样,因此非常适合我的问题。
【讨论】:
【参考方案2】:我能够使用以下行进行管理。根据你的情况改变它。
myView.getBackground().setTint(currentView.getResources().getColor(R.color.colorAccent));
【讨论】:
【参考方案3】:对于 Kotlin , 我修改了@Krestek 的答案:
someLayout.background.setColorFilter(Color.parseColor("#ff8800"), PorterDuff.Mode.SRC_ATOP)
【讨论】:
【参考方案4】:您不能这样做,因为 getColorStateList 方法需要资源的 int id,而您正在传递 RGB 颜色 int。您应该在此 link
之后创建颜色状态列表然后这样设置:
.getColorStateList(R.color.your_xml_name)
【讨论】:
是的,我想到了,所以我用了其他方法。以上是关于如何以编程方式从字符串设置布局背景色调?的主要内容,如果未能解决你的问题,请参考以下文章