如何以编程方式从字符串设置布局背景色调?

时间:2017-12-15 17:50:13

标签: android layout colors hex android-linearlayout

我试过这段代码:

LinearLayout someLayout=(LinearLayout)view.findViewById(R.id.someLayout);
        someLayout.setBackgroundTintList(context.getResources().getColorStateList(Color.parseColor("#ff8800")));

但是我收到了一个错误:android.content.res.Resources$NotFoundException 我从外部源获取颜色十六进制,所以我无法将其嵌入colors.xml中。 另外我想改变色调,而不是背景,所以setBackground不是一个选项。

4 个答案:

答案 0 :(得分:7)

我想我不能使用getColorStateList(),所以我搜索了另一种方法。 最后,我可以使用以下代码设置颜色色调:

LinearLayout someLayout=(LinearLayout)view.findViewById(R.id.someLayout);
        someLayout.getBackground().setColorFilter(Color.parseColor("#ff8800"), PorterDuff.Mode.SRC_ATOP);

这就像我在xml文件中更改了backgroundTint属性一样,所以它非常适合我的问题。

答案 1 :(得分:0)

你不能这样做,因为getColorStateList方法期望资源的int id,并且你传递RGB颜色int。您应该在此link

之后创建颜色状态列表

然后像这样设置:

.getColorStateList(R.color.your_xml_name)

答案 2 :(得分:0)

我能够使用以下行进行管理。根据您的情况进行更改。

myView.getBackground().setTint(currentView.getResources().getColor(R.color.colorAccent));

答案 3 :(得分:0)

对于Kotlin,我修改了Krestek答案:

someLayout.background.setColorFilter(Color.parseColor(“#ff8800”),PorterDuff.Mode.SRC_ATOP)