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

Mue*_*omi 4 java android background-color android-linearlayout

这可能是最简单的事情,但对于我的生活,我还没有想到它.

我有一个方法来设置布局的背景颜色,但我想将颜色作为参数传递,就像我们使用可绘制资源一样.例如

public void setIcon (Drawable icon){
  this.icon = context.getResources().getDrawable(icon);
}

setIcon(R.drawable.tuborg);
Run Code Online (Sandbox Code Playgroud)

我希望能够做类似的事情color (R.color.id).我试过了

public void setColor (Color color){
  layout.setBackgroundColor(context.getResources().getColor(color));
}
Run Code Online (Sandbox Code Playgroud)

public void setColor (Color color){
  layout.setBackgroundColor(ContextCompat.getColor(color));
}
Run Code Online (Sandbox Code Playgroud)

两者都要求int,甚至(int color)不起作用.另外,我试图避免使用Color.parse().

这就是我使用该功能的方式

setColor(R.color.colorAccent);
Run Code Online (Sandbox Code Playgroud)

我有一个带有各种颜色代码的xml.我希望能够调用此函数并获得背景颜色更改.

sho*_*ann 7

您可以尝试以下方法:

public void setColor (int colorId){
  layout.setBackgroundColor(ContextCompat.getColor(colorId));
}
Run Code Online (Sandbox Code Playgroud)

在那种方法中,colorId应该是颜色的十六进制代码

一个好的做法是在colors.xml(位于values文件夹中)上定义颜色。

<?xml version="1.0" encoding="UTF-8"?>
<resources>
    <color name="red">#FF0000</color>
</resources>
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您将使用以下功能:

setColor(R.color.red);
Run Code Online (Sandbox Code Playgroud)

因此,无需创建“颜色”对象,您可以从colors.xml传递值

同样,在您的情况下,您应该将setColor(Color aColor)方法修改为setColor(int aColor)以使其与xml颜色资源一起使用。


mal*_*din 6

您需要一个颜色资源ID.它以R.color开头,它实际上是一个整数id.

public void setColor (@ColorInt int colorId){ // integer id 
  layout.setBackgroundColor(ContextCompat.getColor(colorId));
}
Run Code Online (Sandbox Code Playgroud)

UPDATE

虽然你正在使用它,setColor(R.color.colorAccent)但你的函数参数仍然需要color例如

setColor(颜色)

.您需要更新函数参数类型int,就像我在上面的代码片段中所做的那样.

setColor(int color)

也来自的文档ContextCompat.getColor.

返回与特定资源ID关联的颜色.从{@link android.os.Build.VERSION_CODES#M}开始,返回的颜色将针对指定的Context主题设置样式.

@param id由aapt工具生成的所需资源标识符.此整数对包,类型和资源条目进行编码.值0是无效的标识符.

@return单个颜色值,格式为0xAARRGGBB.