这可能是最简单的事情,但对于我的生活,我还没有想到它。
我有一个方法来设置布局的背景颜色,但我想将颜色作为参数传递,就像我们使用可绘制资源一样。例如
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。我希望能够调用此函数并获得背景颜色更改。
答案 0 :(得分:5)
您需要一个颜色资源ID。它以 R.color 开头,实际上是整数id 。
public void setColor (@ColorInt int colorId){ // integer id
layout.setBackgroundColor(ContextCompat.getColor(colorId));
}
<强>更新强>
尽管您使用的是setColor(R.color.colorAccent)
,但您的功能参数仍需要color
,例如int
。
setColor(颜色颜色)
。您需要将函数参数类型更新为ContextCompat.getColor
,就像我在上面的代码片段中所做的那样。
setColor( int 颜色)
同样来自 public static void PrintTree<T>(T rootNode,
Func<T, string> nodeLabel,
Func<T, List<T>> childernOf)
{
var firstStack = new List<T>();
firstStack.Add(rootNode);
var childListStack = new List<List<T>>();
childListStack.Add(firstStack);
while (childListStack.Count > 0)
{
List<T> childStack = childListStack[childListStack.Count - 1];
if (childStack.Count == 0)
{
childListStack.RemoveAt(childListStack.Count - 1);
}
else
{
rootNode = childStack[0];
childStack.RemoveAt(0);
string indent = "";
for (int i = 0; i < childListStack.Count - 1; i++)
{
indent += (childListStack[i].Count > 0) ? "| " : " ";
}
Console.WriteLine(indent + "+- " + nodeLabel(rootNode));
var children = childernOf(rootNode);
if (children.Count > 0)
{
childListStack.Add(new List<T>(children));
}
}
}
}
的文档。
返回与特定资源ID关联的颜色。开始于 {@link android.os.Build.VERSION_CODES #M},返回的颜色将是 为指定的上下文主题设计样式。
@param id由aapt生成的所需资源标识符 工具。此整数对包,类型和资源条目进行编码。该 值0是无效的标识符。
@return单个颜色值,格式为0xAARRGGBB。
答案 1 :(得分:4)
你可以尝试一下:
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);
因此,无需创建“颜色”对象,您可以传递colors.xml
中的值此外,在您的情况下,您应该将方法setColor(Color aColor)修改为 setColor(int aColor),以使其与xml颜色资源一起使用。
答案 2 :(得分:2)
首先,您似乎正在尝试设置View
的属性,这不是Java中存在的概念。所以你真正想要的是:
layout.setBackgroundColor(context.getResources().getColor(R.color.colorRes));
View#setBackgroundColor()
需要格式为#AARRGGBB
的颜色整数
A = alpha 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上设置它:
view.setBackgroundResource(R.color.colorPrimary);