这可能是有史以来最简单的事情
我有一种方法可以设置布局的背景颜色,但是我想像我们使用可绘制的资源一样将颜色作为参数。例如
public void setIcon (Drawable icon){
this.icon = context.getResources().getDrawable(icon);
}
setIcon(R.drawable.tuborg);
我希望能够对color (R.color.id)
做类似的事情。我尝试了
public void setColor (Color color){
layout.setBackgroundColor(context.getResources().getColor(color));
}
和
public void setColor (Color color){
layout.setBackgroundColor(ContextCompat.getColor(color));
}
两者都要求INT,即使(int color)
也行不通。另外,我正在尝试避免color.parse()。
这就是我使用该函数的方式
setColor(R.color.colorAccent);
我有一个带有各种颜色代码的XML。我希望只能调用此功能并获得背景颜色更改。
您可以尝试一下:
public void setColor (int colorId){
layout.setBackgroundColor(ContextCompat.getColor(colorId));
}
在这种方法中,colorid应该是颜色的hexa代码
一个好习惯是定义颜色上的颜色。xml(内部值文件夹)。
<?xml version="1.0" encoding="UTF-8"?>
<resources>
<color name="red">#FF0000</color>
</resources>
在这种情况下,您将使用这样的功能:
setColor(R.color.red);
因此,无需创建一个"颜色"对象,您可以从colors.xml
传递值另外,在您的情况下,您应该将方法setColor(颜色acolor)修改为 setColor(int acolor),以使其与XML颜色资源一起使用。
您需要一个颜色资源ID。它以 r.color 开始,实际上是整数ID 。
public void setColor (@ColorInt int colorId){ // integer id
layout.setBackgroundColor(ContextCompat.getColor(colorId));
}
update
尽管您正在使用它,例如setColor(R.color.colorAccent)
,但您的函数参数期望color
例如CC_4,例如
setColor(颜色颜色)
。您需要将函数参数类型更新为int
,就像我在上面的摘要中一样。
setColor( int 颜色)
也来自ContextCompat.getColor
的文档。
返回与特定资源ID相关联的颜色。 {@link android.os.os.build.version_codes#m},返回的颜色将为 为指定上下文的主题设计。
@param ID AAPT生成的所需资源标识符 工具。该整数编码包,类型和资源条目。这 值0是一个无效的标识符。
@return表格0xaarrggbb。
,似乎您正在尝试设置View
的属性,这不是Java中存在的概念。所以您真正想要的是:
layout.setBackgroundColor(context.getResources().getColor(R.color.colorRes));
View#setBackgroundColor()
期望以
a = alphar =红色g =绿色B =蓝色。
,要设置纯红色,您可以做这样的事情:
layout.setBackgroundColor(0xFFFF0000);
纯蓝色:
layout.setBackgroundColor(0xFF0000FF);
纯绿色:
layout.setBackgroundColor(0xFF00FF00);
对于资源#getColor(int);,期望您想要的颜色的资源ID。在这种情况下,您将将colors.xml
放在项目的res/values
文件夹中。然后有类似的东西:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#3F51B5</color>
</resources>
然后您可以像这样检索颜色:
int color = context.getResources().getColor(R.color.colorPrimary);
,或者您在API 23或更高时:
int color = context.getColor(R.color.colorPrimary);
或更简单的ContextCompat
方法:
int color = ContextCompat.getColor(R.color.colorPrimary);
然后您可以像这样设置背景颜色:
view.setBackgroundColor(color);
最后,如果您不想这样做,则可以直接在视图上设置它:
view.setBackgroundResource(R.color.colorPrimary);