【问题标题】:Android get color as string valueAndroid将颜色作为字符串值
【发布时间】: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"

如果有,谁能举个例子?

谢谢

【问题讨论】:

    标签: android colors


    【解决方案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);
              

              【讨论】:

                猜你喜欢
                • 2012-03-16
                • 2013-03-21
                • 1970-01-01
                • 1970-01-01
                • 2016-08-11
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多