Understanding colors on Android (six characters)

I am trying to understand how colors work in Android. I have this color set as the background of my LinearLayout, and I get a background gray with some transparency:

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

If I remove the last two characters (55) I get a solid color, losing the transparency. I was trying to find a page where I can see some explanation about this, but I couldn’t find it.

  • Protect from fake reviews on Google Play
  • How add TextView in middle of SeekBar thumb?
  • Android:: Set max-length of EditText programmatically with other InputFilter
  • Troubles installing programmatically an app with INSTALL_PACKAGES permission from /system/app
  • Open Google Plus Page Via Intent In Android
  • How do I declare an extended height Toolbar/Action Bar on Android Lollipop?
  • Android Fatal Signal 11
  • PCM Raw Bytes To Audio on Android
  • What to do about curl clone.bundle error on AOSP repo sync
  • How to create a closed (circular) ListView?
  • OnItemClickListener Not Triggered on Android GridView
  • Android WebView: display only some part of website
  • 6 Solutions collect form web for “Understanding colors on Android (six characters)”

    If you provide 6 hex digits, that means RGB (2 hex digits for each value of red, green and blue).

    If you provide 8 hex digits, it’s an ARGB (2 hex digits for each value of alpha, red, green and blue respectively).

    So by removing the final 55 you’re changing from A=B4, R=55, G=55, B=55 (a mostly transparent grey), to R=B4, G=55, B=55 (a fully-non-transparent dusky pinky).

    See the “Color” documentation for the supported formats.

    Android uses hexadecimal ARGB values, which are formatted as #AARRGGBB. That first pair of letters, the AA, represent the alpha channel. You must convert your decimal opacity values to a hexadecimal value. Here are the steps:

    Alpha Hex Value Process

    1. Take your opacity as a decimal value and multiply it by 255. So, if you have a block that is 50% opaque the decimal value would be .5. For example: .5 x 255 = 127.5
    2. The fraction won’t convert to hexadecimal, so you must round your number up or down to the nearest whole number. For example: 127.5 rounds up to 128; 55.25 rounds down to 55.
    3. Enter your decimal value in a decimal-to-hexadecimal converter, like http://www.binaryhexconverter.com/decimal-to-hex-converter, and convert your values.
    4. If you only get back a single value, prefix it with a zero. For example, if you’re trying to get 5% opacity and you’re going through this process, you’ll end up with the hexadecimal value of D. Add a zero in front of it so it appears as 0D.

    That’s how you find the alpha channel value. I’ve taken the liberty to put together a list of values for you. Enjoy!

    Hex Opacity Values

    • 100% — FF
    • 95% — F2
    • 90% — E6
    • 85% — D9
    • 80% — CC
    • 75% — BF
    • 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

    Going off the answer from @BlondeFurious, here is some Java code to get each hexadecimal value from 100% to 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));
    }
    

    Output:

    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
    

    A JavaScript version is below:

    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>";
    }
    <div id="text"></div>

    On Android, colors are can be specified as RGB or ARGB.

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

    In RGB you have two characters for every color (red, green, blue), and in ARGB you have two additional chars for the alpha channel.

    So, if you have 8 characters, it’s ARGB, with the first two characters specifying the alpha channel. If you remove the leading two characters it’s only RGB (solid colors, no alpha/transparency). If you want to specify a color in your Java source code, you have to use:

    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
    

    Reference: argb

    Android Material Design

    These are the conversions for setting the text color opacity levels.

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

    Dark text on light backgrounds

    enter image description here

    • Primary text: DE000000
    • Secondary text: 8A000000
    • Disabled text, hint text, and icons: 61000000
    • Dividers: 1F000000

    White text on dark backgrounds

    enter image description here

    • Primary text: FFFFFFFF
    • Secondary text: B3FFFFFF
    • Disabled text, hint text, and icons: 80FFFFFF
    • Dividers: 1FFFFFFF

    See also

    • Look up any percentage here.

    An 8-digit hex color value is a representation of ARGB (Alpha, Red, Green, Blue), whereas a 6-digit value just assumes 100% opacity (fully opaque) and defines just the RGB values. So to make this be fully opaque, you can either use #FF555555, or just #555555. Each 2-digit hex value is one byte, representing values from 0-255.

    Android Babe is a Google Android Fan, All about Android Phones, Android Wear, Android Dev and Android Games Apps and so on.