Comprensione dei colori su Android (sei caratteri)


212

Sto cercando di capire come funzionano i colori in Android. Ho questo colore impostato come sfondo del mio LinearLayoute ho uno sfondo grigio con un po 'di trasparenza:

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

Se rimuovo gli ultimi due caratteri (55) ottengo un colore solido, perdendo la trasparenza. Stavo cercando di trovare una pagina in cui posso vedere alcune spiegazioni al riguardo, ma non sono riuscito a trovarlo.

Risposte:


170

Se si forniscono 6 cifre esadecimali, significa RGB (2 cifre esadecimali per ciascun valore di rosso, verde e blu).

Se si forniscono 8 cifre esadecimali, si tratta di un ARGB (2 cifre esadecimali per ogni valore rispettivamente di alfa, rosso, verde e blu).

Quindi, rimuovendo il 55 finale stai cambiando da A = B4, R = 55, G = 55, B = 55 (un grigio per lo più trasparente), a R = B4, G = 55, B = 55 (un non-completamente mignolo scuro trasparente).

Vedere la documentazione "Colore" per i formati supportati.


E come impostare la trasparenza di textView tramite il codice? Voglio convertire il valore ARGB in int, in modo da poterlo utilizzare in seguito nel metodo textView.setBackgroundColor (int color). È possibile? Qualche altro modo per raggiungerlo?
Marek,

@Marek: un valore ARGB è un int, efficacemente. Consulta i documenti su developer.android.com/reference/android/graphics/Color.html (trova <<nella pagina).
Jon Skeet,

ma non è formattato come #AARRGGBB. Viene quindi formulato come 0xAARRGGBB. Ecco perché non ho potuto usarlo nel metodo setBackgroundColor. Potrei usare Color.parseColor ("# AARRGGBB)
Marek

@Marek: non è "formattato" - è solo un numero intero. È possibile combinare i vari bit come indicato nella documentazione.
Jon Skeet,

1
@Toaster: No, trasparenza.
Jon Skeet,

1184

Android utilizza valori esadecimali di ARGB, che sono formattati come #AARRGGBB. Quella prima coppia di lettere, la AA, rappresenta il canale alfa. È necessario convertire i valori dell'opacità decimale in un valore esadecimale. Ecco i passaggi:

Alpha Hex Value Process

  1. Prendi la tua opacità come valore decimale e moltiplicala per 255. Quindi, se hai un blocco opaco al 50%, il valore decimale sarebbe 0,5. Ad esempio: 0,5 x 255 = 127,5
  2. La frazione non verrà convertita in esadecimale, quindi è necessario arrotondare il numero verso l'alto o verso il basso al numero intero più vicino. Ad esempio: 127,5 arrotondamenti fino a 128; 55,25 arrotondati per difetto a 55.
  3. Inserisci il valore decimale in un convertitore da decimale a esadecimale, ad esempio http://www.binaryhexconverter.com/decimal-to-hex-converter , e converti i tuoi valori.
  4. Se si ottiene solo un singolo valore, prefissarlo con uno zero. Ad esempio, se stai cercando di ottenere un'opacità del 5% e stai attraversando questo processo, finirai con il valore esadecimale di D. Aggiungi uno zero davanti ad esso in modo che appaia come 0D.

Ecco come trovare il valore del canale alfa. Mi sono preso la libertà di mettere insieme un elenco di valori per te. Godere!

Valori di opacità esadecimale

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

37
Base su Android Guida alla progettazione dei colori dei materiali: google.com/design/spec/style/… Altri valori chiave di opacità esadecimale: 100%: FF 87%: DE 70%: B3 54%: 8A 30%: 4D 26%: 42 12 %: 1F
cn123h

qui trovi tutti i valori: dtp-aus.com/hexadeci.htm e puoi ottenere l'alfa 0-100 dividendo il numero per 255 e moltiplicandolo per 100. spero che ti aiuti
Niib Fouda,

12% alfa: echo "obase=16; ibase=10; (255*12+50)/100" | bc. (+50 - per arrotondare al valore più vicino, in realtà è 100/2)
Vigilante

195

A partire dalla risposta di @BlondeFurious , ecco un po 'di codice Java per ottenere ogni valore esadecimale dal 100% allo 0% alfa:

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));
}

Produzione:

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

Una versione JavaScript è di seguito:


Puoi anche solo "numerare in esadecimale" dove "numero" è qualsiasi valore compreso tra 0 e 255.


36

Design dei materiali Android

Queste sono le conversioni per impostare i livelli di opacità del colore del testo.

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

Testo scuro su sfondi chiari

inserisci qui la descrizione dell'immagine

  • Testo principale: DE000000
  • Testo secondario: 8A000000
  • Testo disabilitato, testo di suggerimento e icone: 61000000
  • divisori: 1F000000

Testo bianco su sfondi scuri

inserisci qui la descrizione dell'immagine

  • Testo principale: FFFFFFFF
  • Testo secondario: B3FFFFFF
  • Testo disabilitato, testo di suggerimento e icone: 80FFFFFF
  • divisori: 1FFFFFFF

Guarda anche

  • Cerca qui qualsiasi percentuale .

Ottimo lavoro, grazie! A partire dal 7 gennaio 2019, questi valori non sono più visibili nella pagina Android Material Design che hai collegato. Questi sono ancora i valori raccomandati ufficiali e c'è un'altra fonte ufficiale in cui sono indicati? Grazie!
UnwokenFool

@TheUnwokenFool, questa risposta potrebbe non essere più aggiornata ora. Neanche io vedo nulla sull'impostazione dei livelli di opacità per il testo. Se sembrano esserci delle contraddizioni, vai con le linee guida attuali.
Suragch

17

Su Android, i colori possono essere specificati come RGB o ARGB.

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

In RGB hai due caratteri per ogni colore (rosso, verde, blu) e in ARGB hai due caratteri aggiuntivi per il canale alfa.

Quindi, se hai 8 caratteri, è ARGB, con i primi due caratteri che specificano il canale alfa. Se rimuovi i due caratteri iniziali è solo RGB (colori solidi, no alfa / trasparenza). Se si desidera specificare un colore nel codice sorgente Java, è necessario utilizzare:

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

Riferimento: argb


7

Un valore di colore esadecimale a 8 cifre è una rappresentazione di ARGB (alfa, rosso, verde, blu), mentre un valore di 6 cifre assume solo il 100% di opacità (completamente opaco) e definisce solo i valori RGB. Quindi, per renderlo completamente opaco, puoi usare # FF555555 o solo # 555555. Ogni valore esadecimale a 2 cifre è un byte, che rappresenta i valori da 0 a 255.


-1

nella nuova versione di Chrome (forse 67.0.3396.62), il colore esadecimale CSS può utilizzare questo display modello,

per esempio:

div{
  background-color:#FF00FFcc;
}

cc è opacità, ma il vecchio chrome non supporta tale mod


Benvenuto in StackOverflow, visita il tour . La tua risposta non aiuta l'OP come ha chiesto a proposito dei colori in Android, non Chrome o HTML.
PeS

@PeS ieri, sì, ma hanno la stessa rappresentazione.
Heicks,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.