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 ) &amp; 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将颜色作为字符串值的主要内容,如果未能解决你的问题,请参考以下文章

如何将“#ffff”字符串颜色作为参数提供给 setBackgroundColor()? [复制]

如何在 R 中使用颜色十六进制值作为函数参数?

Android 一个String字符串 设置不同的颜色值

Android 一个String字符串 设置不同的颜色值

如何在 Android 中将颜色整数转换为十六进制字符串?

less1