如何将颜色资源作为参数(Android)传递



这可能是有史以来最简单的事情

我有一种方法可以设置布局的背景颜色,但是我想像我们使用可绘制的资源一样将颜色作为参数。例如

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);

最新更新