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.我希望能够调用此函数并获得背景颜色更改.
您可以尝试以下方法:
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颜色资源一起使用。
您需要一个颜色资源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.
| 归档时间: |
|
| 查看次数: |
7338 次 |
| 最近记录: |