Grundlegendes zu Farben unter Android (sechs Zeichen)

212

Ich versuche zu verstehen, wie Farben in Android funktionieren. Ich habe diese Farbe als Hintergrund festgelegt LinearLayoutund erhalte ein graues Hintergrundbild mit etwas Transparenz:

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

Wenn ich die letzten beiden Zeichen (55) entferne, erhalte ich eine Volltonfarbe, wodurch die Transparenz verloren geht. Ich habe versucht, eine Seite zu finden, auf der ich Erklärungen dazu finden kann, aber ich konnte sie nicht finden.

Thiago
quelle

Antworten:

170

Wenn Sie 6 hexadezimale Ziffern angeben, bedeutet dies RGB (2 hexadezimale Ziffern für jeden Wert von Rot, Grün und Blau).

Wenn Sie 8 hexadezimale Ziffern angeben, handelt es sich um einen ARGB (2 hexadezimale Ziffern für jeden Wert von Alpha, Rot, Grün und Blau).

Wenn Sie also die letzten 55 entfernen, wechseln Sie von A = B4, R = 55, G = 55, B = 55 (ein größtenteils transparentes Grau) zu R = B4, G = 55, B = 55 (ein vollständig nicht) -transparenter dunkler kleiner Finger).

Informationen zu den unterstützten Formaten finden Sie in der Dokumentation "Farbe" .

Jon Skeet
quelle
Und wie kann man die Transparenz von textView durch Code einstellen? Ich möchte den ARGB-Wert in int konvertieren, damit ich ihn anschließend in der Methode textView.setBackgroundColor (int color) verwenden kann. Ist es möglich? Irgendein anderer Weg, um es zu erreichen?
Marek
@Marek: Ein ARGB-Wert ist effektiv ein int. Weitere Informationen finden Sie in den Dokumenten unter developer.android.com/reference/android/graphics/Color.html ( siehe <<Seite).
Jon Skeet
Es ist jedoch nicht als #AARRGGBB formatiert. Es wird dann als 0xAARRGGBB formatiert. Deshalb konnte ich es nicht in der setBackgroundColor-Methode verwenden. Ich könnte Color.parseColor ("# AARRGGBB)
Marek
@Marek: Es ist nicht "formatiert" - es ist nur eine ganze Zahl. Sie können die verschiedenen Bits wie in der Dokumentation aufgeführt kombinieren.
Jon Skeet
1
@ Toaster: Nein, Transparenz.
Jon Skeet
1184

Android verwendet hexadezimale ARGB-Werte, die als #AARRGGBB formatiert sind. Das erste Buchstabenpaar, das AA, repräsentiert den Alphakanal. Sie müssen Ihre dezimalen Deckkraftwerte in einen hexadezimalen Wert konvertieren. Hier sind die Schritte:

Alpha-Hex-Wert-Prozess

  1. Nehmen Sie Ihre Deckkraft als Dezimalwert und multiplizieren Sie sie mit 255. Wenn Sie also einen Block haben, der zu 50% undurchsichtig ist, beträgt der Dezimalwert 0,5. Zum Beispiel: 0,5 x 255 = 127,5
  2. Der Bruch wird nicht in hexadezimal konvertiert, daher müssen Sie Ihre Zahl auf die nächste ganze Zahl auf- oder abrunden. Zum Beispiel: 127,5 Runden auf 128; 55,25 rundet auf 55 ab.
  3. Geben Sie Ihren Dezimalwert in einen Dezimal-Hexadezimal-Konverter wie http://www.binaryhexconverter.com/decimal-to-hex-converter ein und konvertieren Sie Ihre Werte.
  4. Wenn Sie nur einen einzelnen Wert zurückerhalten, stellen Sie ihm eine Null voran. Wenn Sie beispielsweise versuchen, eine Deckkraft von 5% zu erzielen, und diesen Prozess durchlaufen, erhalten Sie den hexadezimalen Wert D. Fügen Sie eine Null davor hinzu, sodass sie als 0D angezeigt wird.

So finden Sie den Alpha-Kanal-Wert. Ich habe mir erlaubt, eine Werteliste für Sie zusammenzustellen. Genießen!

Hex-Opazitätswerte

  • 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
BlondeFurious
quelle
37
Basis für Android Material Farbdesign-Anleitung: google.com/design/spec/style/… Weitere wichtige Hex-Deckkraftwerte: 100%: FF 87%: DE 70%: B3 54%: 8A 30%: 4D 26%: 42 12 %: 1F
cn123h
Hier finden Sie alle Werte: dtp-aus.com/hexadeci.htm und Sie können Alpha 0-100 erhalten, indem Sie die Zahl durch 255 teilen und durch 100
multiplizieren. Ich
für 12% Alpha : echo "obase=16; ibase=10; (255*12+50)/100" | bc. (+50 - für das Runden auf den nächsten Wert ist es tatsächlich 100/2)
Vigilancer
195

Nach der Antwort von @BlondeFurious finden Sie hier einen Java-Code, mit dem Sie jeden Hexadezimalwert von 100% auf 0% Alpha ermitteln können:

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

Ausgabe:

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

Eine JavaScript-Version finden Sie unten:


Sie können auch einfach "number to hex" von Google eingeben, wobei "number" ein beliebiger Wert zwischen 0 und 255 ist.

Jared Rummler
quelle
36

Android Material Design

Dies sind die Konvertierungen zum Festlegen der Deckkraft für Textfarben.

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

Dunkler Text auf hellem Hintergrund

Geben Sie hier die Bildbeschreibung ein

  • Primärtext: DE000000
  • Sekundärtext: 8A000000
  • Deaktivierter Text, Hinweistext und Symbole: 61000000
  • Teiler: 1F000000

Weißer Text auf dunklem Hintergrund

Geben Sie hier die Bildbeschreibung ein

  • Primärtext: FFFFFFFF
  • Sekundärtext: B3FFFFFF
  • Deaktivierter Text, Hinweistext und Symbole: 80FFFFFF
  • Teiler: 1FFFFFFF

Siehe auch

  • Schauen Sie sich jedes Prozent hier .
Suragch
quelle
Tolle Arbeit, danke! Ab dem 7. Januar 2019 sind diese Werte auf der von Ihnen verlinkten Android Material Design-Seite nicht mehr sichtbar. Sind dies immer noch die offiziell empfohlenen Werte, und gibt es eine andere offizielle Quelle, in der sie angegeben sind? Vielen Dank!
TheUnwokenFool
@TheUnwokenFool, diese Antwort ist möglicherweise jetzt veraltet. Ich sehe auch nichts über das Festlegen von Deckkraftstufen für Text. Wenn es irgendwelche Widersprüche zu geben scheint, gehen Sie zu den aktuellen Richtlinien.
Suragch
17

Unter Android können Farben als RGB oder ARGB angegeben werden.

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

In RGB haben Sie zwei Zeichen für jede Farbe (rot, grün, blau) und in ARGB haben Sie zwei zusätzliche Zeichen für den Alphakanal.

Wenn Sie also 8 Zeichen haben, ist es ARGB, wobei die ersten beiden Zeichen den Alphakanal angeben. Wenn Sie die beiden führenden Zeichen entfernen, handelt es sich nur um RGB (Volltonfarben, kein Alpha / Transparenz). Wenn Sie eine Farbe in Ihrem Java-Quellcode angeben möchten, müssen Sie Folgendes verwenden:

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

Referenz: argb

Alibi
quelle
7

Ein 8-stelliger Hex-Farbwert ist eine Darstellung von ARGB (Alpha, Rot, Grün, Blau), während ein 6-stelliger Wert nur eine Deckkraft von 100% (vollständig undurchsichtig) annimmt und nur die RGB-Werte definiert. Um dies vollständig undurchsichtig zu machen, können Sie entweder # FF555555 oder nur # 555555 verwenden. Jeder zweistellige Hex-Wert ist ein Byte und repräsentiert Werte von 0 bis 255.

Kevin Coppock
quelle
-1

Bei der neuen Chromversion (möglicherweise 67.0.3396.62) kann die CSS-Hex-Farbe diese Modellanzeige verwenden.

z.B:

div{
  background-color:#FF00FFcc;
}

cc ist Deckkraft, aber altes Chrom unterstützt diesen Mod nicht

Heicks
quelle
Willkommen bei StackOverflow, bitte besuchen Sie die Tour . Ihre Antwort hilft dem OP nicht, da er nach Farben in Android gefragt hat, nicht nach Chrome oder HTML.
PeS
@ PeS gestern ja, aber sie haben die gleiche Darstellung.
Heicks