如何将颜色资源作为参数传递 (Android)
How to pass color resource as parameter (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。我希望能够调用此函数并更改背景颜色。
您需要一个颜色资源 ID。它以 R.color 开头,它实际上是一个 整数 id.
public void setColor (@ColorInt int colorId){ // integer id
layout.setBackgroundColor(ContextCompat.getColor(colorId));
}
更新
尽管您像 setColor(R.color.colorAccent)
一样使用它,但您的 函数参数 仍然需要 color
例如
setColor (Color color)
。您需要将函数参数类型更新为 int
,就像我在上面的代码片段中所做的那样。
setColor (int color)
也来自 ContextCompat.getColor
的文档。
Returns a color associated with a particular resource ID.Starting in
{@link android.os.Build.VERSION_CODES#M}, the returned color will be
styled for the specified Context's theme.
@param id The desired resource identifier, as generated by the aapt
tool. This integer encodes the package, type, and resource entry. The
value 0 is an invalid identifier.
@return A single color value in the form 0xAARRGGBB.
首先,您似乎在尝试设置 View
的属性,这不是 Java 中存在的概念。所以你真正想要的是:
layout.setBackgroundColor(context.getResources().getColor(R.color.colorRes));
View#setBackgroundColor()
需要格式为 #AARRGGBB
的颜色整数,其中
A = 阿尔法
R = 红色
G = 绿色
B = 蓝色。
所以要设置纯红色,你可以这样做:
layout.setBackgroundColor(0xFFFF0000);
纯蓝色:
layout.setBackgroundColor(0xFF0000FF);
纯绿色:
layout.setBackgroundColor(0xFF00FF00);
对于Resources#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);
你可以试试这个:
public void setColor (int colorId){
layout.setBackgroundColor(ContextCompat.getColor(colorId));
}
在该方法中,colorId 应该是颜色的六进制代码
一个好的做法是在 colors.xml(值文件夹内)上定义颜色。
<?xml version="1.0" encoding="UTF-8"?>
<resources>
<color name="red">#FF0000</color>
</resources>
在这种情况下,您将像这样使用此函数:
setColor(R.color.red);
因此,无需创建 "color" 对象,您可以从 colors.xml
传递值
此外,在您的情况下,您应该将方法 setColor(Color aColor) 修改为 setColor(int aColor) 以使其与 xml 颜色资源一起使用。
这可能是有史以来最简单的事情,但对于我来说,我还没有弄明白。
我有一个设置布局背景颜色的方法,但我想像处理可绘制资源一样将颜色作为参数传递。例如
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。我希望能够调用此函数并更改背景颜色。
您需要一个颜色资源 ID。它以 R.color 开头,它实际上是一个 整数 id.
public void setColor (@ColorInt int colorId){ // integer id
layout.setBackgroundColor(ContextCompat.getColor(colorId));
}
更新
尽管您像 setColor(R.color.colorAccent)
一样使用它,但您的 函数参数 仍然需要 color
例如
setColor (Color color)
。您需要将函数参数类型更新为 int
,就像我在上面的代码片段中所做的那样。
setColor (int color)
也来自 ContextCompat.getColor
的文档。
Returns a color associated with a particular resource ID.Starting in {@link android.os.Build.VERSION_CODES#M}, the returned color will be styled for the specified Context's theme.
@param id The desired resource identifier, as generated by the aapt tool. This integer encodes the package, type, and resource entry. The value 0 is an invalid identifier.
@return A single color value in the form 0xAARRGGBB.
首先,您似乎在尝试设置 View
的属性,这不是 Java 中存在的概念。所以你真正想要的是:
layout.setBackgroundColor(context.getResources().getColor(R.color.colorRes));
View#setBackgroundColor()
需要格式为 #AARRGGBB
的颜色整数,其中
A = 阿尔法 R = 红色 G = 绿色 B = 蓝色。
所以要设置纯红色,你可以这样做:
layout.setBackgroundColor(0xFFFF0000);
纯蓝色:
layout.setBackgroundColor(0xFF0000FF);
纯绿色:
layout.setBackgroundColor(0xFF00FF00);
对于Resources#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);
你可以试试这个:
public void setColor (int colorId){
layout.setBackgroundColor(ContextCompat.getColor(colorId));
}
在该方法中,colorId 应该是颜色的六进制代码
一个好的做法是在 colors.xml(值文件夹内)上定义颜色。
<?xml version="1.0" encoding="UTF-8"?>
<resources>
<color name="red">#FF0000</color>
</resources>
在这种情况下,您将像这样使用此函数:
setColor(R.color.red);
因此,无需创建 "color" 对象,您可以从 colors.xml
传递值此外,在您的情况下,您应该将方法 setColor(Color aColor) 修改为 setColor(int aColor) 以使其与 xml 颜色资源一起使用。