【问题标题】:Understanding colors on Android (six characters)了解 Android 上的颜色(六个字符)
【发布时间】:2011-07-23 15:19:01
【问题描述】:

我正在尝试了解颜色在 Android 中的工作原理。我将这种颜色设置为我的LinearLayout 的背景,并且我得到了具有一定透明度的灰色背景:

<gradient android:startColor="#b4555555" android:endColor="#b4555555"
 android:angle="270.0" />

如果我删除最后两个字符 (55),我会得到纯色,失去透明度。我试图找到一个页面,在那里我可以看到一些关于此的解释,但我找不到它。

【问题讨论】:

    标签: android colors hex transparency


    【解决方案1】:

    Android 使用格式为 #AARRGGBB 的十六进制 ARGB 值。第一对字母 AA 代表 Alpha 通道。您必须将十进制不透明度值转换为十六进制值。步骤如下:

    Alpha Hex 值过程

    1. 将不透明度作为十进制值乘以 255。因此,如果您有一个 50% 不透明的块,则十进制值为 0.5。例如:0.5 x 255 = 127.5
    2. 分数不会转换为十六进制,因此您必须将数字向上或向下舍入到最接近的整数。例如:127.5 向上取整到 128; 55.25 向下舍入为 55。
    3. 在十进制到十六进制转换器中输入您的十进制值,例如http://www.binaryhexconverter.com/decimal-to-hex-converter,然后转换您的值。
    4. 如果您只返回一个值,请在其前面加上一个零。例如,如果您尝试获得 5% 的不透明度并且正在执行此过程,您最终会得到 D 的十六进制值。在其前面添加一个零,使其显示为 0D。

    这就是您找到 Alpha 通道值的方法。我冒昧地为您整理了一份价值观清单。享受吧!

    十六进制不透明度值

    • 100% — FF
    • 95% — F2
    • 90% — E6
    • 85% — D9
    • 80% — 抄送
    • 75% — 高炉
    • 70% — B3
    • 65% — A6
    • 60% — 99
    • 55% — 8C
    • 50% — 80
    • 45% — 73
    • 40% — 66
    • 35% — 59
    • 30% — 4D
    • 25% — 40
    • 20% — 33
    • 15% — 26
    • 10% — 1A
    • 5% — 0D
    • 0% — 00

    【讨论】:

    • 基于 Android Material 颜色设计指南:google.com/design/spec/style/… 更多关键十六进制不透明度值:100%:FF 87%:DE 70%:B3 54%:8A 30%:4D 26%:42 12 %: 1F
    • 在这里您可以找到所有值:dtp-aus.com/hexadeci.htm,您可以通过将数字除以 255 并将其乘以 100 来获得 0-100。希望对您有所帮助
    • 对于 12% alpha:echo "obase=16; ibase=10; (255*12+50)/100" | bc。 (+50 - 四舍五入到最接近的值,实际上是 100/2)
    【解决方案2】:

    离开the answer from @BlondeFurious,这里有一些 Java 代码可以让每个十六进制值从 100% 到 0% alpha:

    for (double i = 1; i >= 0; i -= 0.01) {
        i = Math.round(i * 100) / 100.0d;
        int alpha = (int) Math.round(i * 255);
        String hex = Integer.toHexString(alpha).toUpperCase();
        if (hex.length() == 1)
            hex = "0" + hex;
        int percent = (int) (i * 100);
        System.out.println(String.format("%d%% — %s", percent, hex));
    }
    

    输出:

    100% — FF
    99% — FC
    98% — FA
    97% — F7
    96% — F5
    95% — F2
    94% — F0
    93% — ED
    92% — EB
    91% — E8
    90% — E6
    89% — E3
    88% — E0
    87% — DE
    86% — DB
    85% — D9
    84% — D6
    83% — D4
    82% — D1
    81% — CF
    80% — CC
    79% — C9
    78% — C7
    77% — C4
    76% — C2
    75% — BF
    74% — BD
    73% — BA
    72% — B8
    71% — B5
    70% — B3
    69% — B0
    68% — AD
    67% — AB
    66% — A8
    65% — A6
    64% — A3
    63% — A1
    62% — 9E
    61% — 9C
    60% — 99
    59% — 96
    58% — 94
    57% — 91
    56% — 8F
    55% — 8C
    54% — 8A
    53% — 87
    52% — 85
    51% — 82
    50% — 80
    49% — 7D
    48% — 7A
    47% — 78
    46% — 75
    45% — 73
    44% — 70
    43% — 6E
    42% — 6B
    41% — 69
    40% — 66
    39% — 63
    38% — 61
    37% — 5E
    36% — 5C
    35% — 59
    34% — 57
    33% — 54
    32% — 52
    31% — 4F
    30% — 4D
    29% — 4A
    28% — 47
    27% — 45
    26% — 42
    25% — 40
    24% — 3D
    23% — 3B
    22% — 38
    21% — 36
    20% — 33
    19% — 30
    18% — 2E
    17% — 2B
    16% — 29
    15% — 26
    14% — 24
    13% — 21
    12% — 1F
    11% — 1C
    10% — 1A
    9% — 17
    8% — 14
    7% — 12
    6% — 0F
    5% — 0D
    4% — 0A
    3% — 08
    2% — 05
    1% — 03
    0% — 00
    

    JavaScript 版本如下:

    var text = document.getElementById('text');
    for (var i = 1; i >= 0; i -= 0.01) {
        i = Math.round(i * 100) / 100;
        var alpha = Math.round(i * 255);
        var hex = (alpha + 0x10000).toString(16).substr(-2).toUpperCase();
        var perc = Math.round(i * 100);
        text.innerHTML += perc + "% — " + hex + " (" + alpha + ")</br>";
    }
    &lt;div id="text"&gt;&lt;/div&gt;

    您也可以只搜索“数字到十六进制”,其中“数字”是 0 到 255 之间的任何值。

    【讨论】:

      【解决方案3】:

      如果您提供 6 个十六进制数字,则表示 RGB(红色、绿色和蓝色的每个值对应 2 个十六进制数字)。

      如果您提供 8 个十六进制数字,则它是 ARGB(alpha、红色、绿色和蓝色的每个值分别有 2 个十六进制数字)。

      因此,通过删除最后的 55,您将从 A=B4, R=55, G=55, B=55(大部分透明的灰色)变为 R=B4, G=55, B=55(a完全不透明的暗淡小指)。

      有关支持的格式,请参阅"Color" documentation

      【讨论】:

      • 以及如何通过代码设置textView透明度?我想将 ARGB 值转换为 int,所以我可以在 textView.setBackgroundColor(int color) 方法中使用它。可能吗?还有其他方法可以实现吗?
      • @Marek:ARGB 值一个 int,实际上。请参阅developer.android.com/reference/android/graphics/Color.html 的文档(在页面中找到&lt;&lt;)。
      • 但它的格式不是#AARRGGBB。然后将其格式化为 0xAARRGGBB。这就是为什么我不能在 setBackgroundColor 方法中使用它。我可以使用 Color.parseColor("#AARRGGBB)
      • @Marek:它不是“格式化的”——它只是一个整数。您可以组合文档中列出的各个位。
      • @Toaster:不,透明度。
      【解决方案4】:

      Android Material Design

      这些是用于设置文本颜色不透明度级别的转换。

      • 100%:FF
      • 87%:DE
      • 70%:B3
      • 54%:8A
      • 50%:80
      • 38%:61
      • 12%:1F

      浅色背景上的深色文字

      • 主要文本:DE000000
      • 辅助文字:8A000000
      • 禁用文本、提示文本和图标:61000000
      • 分频器:1F000000

      深色背景上的白色文字

      • 主要文本:FFFFFFFF
      • 辅助文字:B3FFFFFF
      • 禁用文本、提示文本和图标:80FFFFFF
      • 分频器:1FFFFFFF

      另见

      • 查找任何百分比here

      【讨论】:

      • 很棒的工作,谢谢!自 2019 年 1 月 7 日起,这些值在您链接的 Android Material Design 页面中不再可见。这些仍然是官方推荐的值吗?还有其他官方来源吗?谢谢!
      • @TheUnwokenFool,这个答案现在可能已经过时了。我也没有看到任何关于为文本设置不透明度级别的信息。如果似乎有任何矛盾,请按照当前的准则进行。
      【解决方案5】:

      在 Android 上,颜色可以指定为 RGB 或 ARGB。

      http://en.wikipedia.org/wiki/ARGB

      在 RGB 中,每种颜色(红色、绿色、蓝色)都有两个字符,而在 ARGB 中,Alpha 通道有两个额外的字符。

      因此,如果您有 8 个字符,则为 ARGB,前两个字符指定 Alpha 通道。如果删除前两个字符,则只有 RGB(纯色,无 alpha/透明度)。如果要在 Java 源代码中指定颜色,则必须使用:

      int Color.argb (int alpha, int red, int green, int blue)
      
      alpha  Alpha component [0..255] of the color
      red    Red component [0..255] of the color
      green  Green component [0..255] of the color
      blue   Blue component [0..255] of the color
      

      参考:argb

      【讨论】:

        【解决方案6】:

        8 位十六进制颜色值表示 ARGB(Alpha、红色、绿色、蓝色),而 6 位值仅假定 100% 不透明度(完全不透明)并仅定义 RGB 值。因此,要使其完全不透明,您可以使用#FF555555 或仅使用#555555。每个 2 位十六进制值是一个字节,代表 0-255 之间的值。

        【讨论】:

          【解决方案7】:

          使用这个表(我更喜欢把它放在 colors.xml 中以便快速搜索)

          <!--Percent to hex conversion table-->
          <!--%  0  1  2  3  4  5  6  7  8  9-->
          <!--0 00 03 05 08 0A 0D 0F 12 14 17-->
          <!--1 19 1C 1F 21 24 26 29 2B 2E 30-->
          <!--2 33 36 38 3B 3D 40 42 45 47 4A-->
          <!--3 4D 4F 52 54 57 59 5C 5E 61 63-->
          <!--4 66 69 6B 6E 70 73 75 78 7A 7D-->
          <!--5 80 82 85 87 8A 8C 8F 91 94 96-->
          <!--6 99 9C 9E A1 A3 A6 A8 AB AD B0-->
          <!--7 B3 B5 B8 BA BD BF C2 C4 C7 C9-->
          <!--8 CC CF D1 D4 D6 D9 DB DE E0 E3-->
          <!--9 E6 E8 EB ED F0 F2 F5 F7 FA FC-->
          

          【讨论】:

          • 最佳答案。如果你用一些关于如何阅读表格的例子来解释它可能会更好。
          【解决方案8】:

          在 Android 上,颜色可以用以下格式声明

          #AARRGGBB
          

          AA - 是我们最感兴趣的位,它代表 alpha 通道

          RR GG BB - 分别为红色、绿色和蓝色通道

          现在,为了给我们的颜色添加透明度,我们需要在它前面加上表示 alpha(透明度)的十六进制值。

          例如,如果您想将 80% 的透明度值设置为黑色 (#000000),则需要在其前面加上 CC,结果我们最终得到以下颜色资源 #CC000000

          您可以在我的博客上阅读更多详细信息 https://androidexplained.github.io/android/ui/2020/10/12/hex-color-code-transparency.html

          【讨论】:

            【解决方案9】:

            十六进制代码中的颜色写为

            # AA       RR    GG      BB
            # Alpha  红色  绿色  蓝色

            对于每个组(AA、RR、GG、BB),可能的值是:
            -> 00 到 FF in Hex ,即 0 到 255 十进制

            所以要改变颜色的 Alpha/AA/透明度,你只需要改变由 AA 组表示的十六进制字符串中的前两个十六进制字符

            50% -> 255 x 0.50= 128(近似/四舍五入)
            然后转换 128 到十六进制 = 08

            因此,具有 50% Alpha/透明度 的绿色 #00FF00 将是 #0800FF00

            【讨论】:

              【解决方案10】:

              在新的chrome版本(可能是67.0.3396.62),CSS十六进制颜色可以使用这个模型显示,

              例如:

              div{
                background-color:#FF00FFcc;
              }
              

              cc 是 opacity ,但旧版 chrome 不支持该 mod

              【讨论】:

              • 欢迎来到 StackOverflow,请访问tour。您的回复对 OP 没有帮助,因为他询问了 Android 中的颜色,而不是 Chrome 或 HTML。
              • @PeS 昨天,是的,但它们具有相同的表示形式。
              猜你喜欢
              • 2019-06-16
              • 2014-04-25
              • 2019-06-09
              • 2011-05-29
              • 2010-09-27
              • 1970-01-01
              • 2012-03-16
              • 2012-11-01
              相关资源
              最近更新 更多