Android将颜色作为字符串值
Posted
技术标签:
【中文标题】Android将颜色作为字符串值【英文标题】:Android get color as string value 【发布时间】:2011-06-28 23:01:22 【问题描述】:如果我在资源中定义了一种颜色
<resources>
<color name="someColor">#123456</color>
</resources>
可以通过 id 设置颜色,比如
view.setTextColor(R.color.someColor);
是否也可以从colors.xml中获取颜色字符串值?
有点像
colorStr = getColor(R.color.someColor);
// -> colorStr = "#123456"
如果有,谁能举个例子?
谢谢
【问题讨论】:
【参考方案1】:这是你的答案
colorStr=getResources().getString(R.color.someColor);
你会得到
colorStr = "#123456"
【讨论】:
首先,谢谢。我没想过将 getString 用于颜色。它有效,但不是 colorStr = "#123456" 我得到的是 "#ff123456",这不好:( 返回颜色字符串的简单子字符串,用于移除 Alpha 作品。 getResources().getString(R.color.my_colour).substring(3); 这不再起作用,错误'期望的资源类型为字符串' @CliveJefferies 您可以在声明上方添加//noinspection ResourceType
。
getResources().getString(0+R.color.someColor);
工作【参考方案2】:
只是为了方便copypasta:
"#" + Integer.toHexString(ContextCompat.getColor(getActivity(), R.color.some_color));
或者如果你想要它没有透明度:
"#" + Integer.toHexString(ContextCompat.getColor(getActivity(), R.color.some_color) & 0x00ffffff);
【讨论】:
这很好用,但是我需要使用'#' + Integer.toHexString(getResources().getColor(R.color.someColor);
修改它,因为后来我在Color.parseColor
中使用它
geColor() 需要 api > 23
您可以使用已弃用的 getColor() 没问题。只需删除“getColor(...)”并再次输入,使用智能感知完成带有 android 已弃用的 getColor 调用的方法调用,就可以了。
Integer.toHexString(ContextCompat.getColor(context, R.color.black) & 0x00ffffff);
如果十六进制颜色的第一个为 0,这将不起作用。【参考方案3】:
如果您的十六进制字符串中有前导零,则此处使用Integer.toHexString()
的所有解决方案都会中断。像#0affff
这样的颜色会产生#affff
。改用这个:
String.format("#%06x", ContextCompat.getColor(this, R.color.your_color) & 0xffffff)
或使用 alpha:
String.format("#%08x", ContextCompat.getColor(this, R.color.your_color) & 0xffffffff)
【讨论】:
在 Kotlin 中:String.format("#%06x", ContextCompat.getColor(context, color) and 0xffffff)【参考方案4】:上面提供的答案没有更新。
请试试这个
String colorHex = "#" + Integer.toHexString(ContextCompat.getColor(getActivity(), R.color.dark_sky_blue) & 0x00ffffff);
【讨论】:
【参考方案5】:因为getResources().getColor
需要 api > 23。所以这样更好:
只是为了方便复制和粘贴:
Integer.toHexString( ContextCompat.getColor( getContext(), R.color.someColor ) );
或者如果你想要它没有透明度:`
Integer.toHexString( ContextCompat.getColor( getContext(), R.color.someColor ) & 0x00ffffff );
【讨论】:
ContextCompat.getColor
不接受 3 个参数
@Nashe 它是 2 个参数,而不是 3 个!【参考方案6】:
它对我有用!
String.format("#%06x", ContextCompat.getColor(this, R.color.my_color) & 0xffffff)
【讨论】:
【参考方案7】:对于 21 以上的 API,您可以使用
getString(R.color.color_name);
这将以字符串格式返回颜色。 要将其转换为整数格式的颜色(有时只接受整数),那么:
Color.parseColor(getString(R.color.color_name));
上面的表达式返回与 color.xml 文件中定义的颜色等效的整数
【讨论】:
【参考方案8】:如果发生错误,请添加 @SuppressLint("ResourceType")。如下所示。
private String formatUsernameAction(UserInfo userInfo, String action)
String username = userInfo.getUsername();
@SuppressLint("ResourceType") String usernameColor = getContext().getResources().getString(R.color.background_button);
return "<font color=\""+usernameColor+"\">" + username
+ "</font> <font color=\"#787f83\">" + action.toLowerCase() + "</font>";
【讨论】:
【参考方案9】:我认为没有标准功能。但是,您可以将返回值从 getColor()
转换为十六进制并将十六进制值转换为字符串。
十六进制 123456 = 整数 1193046;
【讨论】:
【参考方案10】:这就是我的做法:
String color = "#" + Integer.toHexString(ContextCompat.getColor
(getApplicationContext(), R.color.yourColor) & 0x00ffffff);
【讨论】:
以上是关于Android将颜色作为字符串值的主要内容,如果未能解决你的问题,请参考以下文章