Memahami warna pada Android (enam karakter)

212

Saya mencoba memahami bagaimana warna bekerja di Android. Saya menetapkan warna ini sebagai latar belakang saya LinearLayout, dan saya mendapatkan latar belakang abu-abu dengan transparansi:

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

Jika saya menghapus dua karakter terakhir (55) saya mendapatkan warna solid, kehilangan transparansi. Saya mencoba menemukan halaman di mana saya dapat melihat beberapa penjelasan tentang ini, tetapi saya tidak dapat menemukannya.

Thiago
sumber

Jawaban:

170

Jika Anda memberikan 6 digit hex, itu berarti RGB (2 digit hex untuk setiap nilai merah, hijau dan biru).

Jika Anda memberikan 8 digit hex, ini adalah ARGB (2 digit hex untuk masing-masing nilai alfa, merah, hijau dan biru).

Jadi dengan menghapus final 55 Anda berubah dari A = B4, R = 55, G = 55, B = 55 (abu-abu sebagian besar transparan), ke R = B4, G = 55, B = 55 (sepenuhnya-non -Transparent pinky pinky).

Lihat dokumentasi "Warna" untuk format yang didukung.

Jon Skeet
sumber
Dan bagaimana cara mengatur transparansi textView melalui kode? Saya ingin mengonversi nilai ARGB ke int, jadi saya bisa menggunakannya setelah itu dalam metode textView.setBackgroundColor (int color). Apa itu mungkin? Adakah cara lain untuk mencapainya?
Marek
@ Marsek: Nilai ARGB adalah int, efektif. Lihat dokumen di developer.android.com/reference/android/graphics/Color.html (temukan <<di halaman).
Jon Skeet
tetapi tidak diformat sebagai #AARRGGBB. Ini kemudian diformat sebagai 0xAARRGGBB. Itulah mengapa saya tidak bisa menggunakannya dalam metode setBackgroundColor. Saya bisa menggunakan Color.parseColor ("# AARRGGBB)
Marek
@ Marsek: Ini bukan "diformat" - itu hanya bilangan bulat. Anda dapat menggabungkan berbagai bit seperti yang tercantum dalam dokumentasi.
Jon Skeet
1
@Toaster: Tidak, transparansi.
Jon Skeet
1184

Android menggunakan nilai ARGB heksadesimal, yang diformat sebagai #AARRGGBB. Sepasang huruf pertama, AA, mewakili saluran alfa. Anda harus mengonversi nilai opacity desimal Anda menjadi nilai heksadesimal. Berikut langkah-langkahnya:

Proses Nilai Alpha Hex

  1. Ambil opacity Anda sebagai nilai desimal dan kalikan dengan 255. Jadi, jika Anda memiliki blok yang 50% buram, nilai desimalnya adalah 0,5. Misalnya: .5 x 255 = 127.5
  2. Fraksi tidak akan dikonversi menjadi heksadesimal, jadi Anda harus membulatkan nomor Anda ke atas atau ke bawah ke seluruh nomor terdekat. Misalnya: 127,5 putaran hingga 128; 55.25 putaran ke 55.
  3. Masukkan nilai desimal Anda dalam konverter desimal ke heksadesimal, seperti http://www.binaryhexconverter.com/decimal-to-hex-converter , dan konversikan nilai Anda.
  4. Jika Anda hanya mendapatkan kembali satu nilai, awali dengan nol. Misalnya, jika Anda mencoba untuk mendapatkan opacity 5% dan Anda akan melalui proses ini, Anda akan berakhir dengan nilai heksadesimal D. Tambahkan nol di depannya sehingga muncul sebagai 0D.

Begitulah cara Anda menemukan nilai saluran alpha. Saya telah mengambil kebebasan untuk mengumpulkan daftar nilai untuk Anda. Nikmati!

Nilai Hex Opacity

  • 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
sumber
37
Berdasarkan pada panduan desain warna Bahan Android: google.com/design/spec/style/… Lebih banyak kunci Hex Opacity Nilai: 100%: FF 87%: DE 70%: B3 54%: 8A 30%: 4D 26%: 42 12 %: 1F
cn123h
di sini Anda menemukan semua nilai: dtp-aus.com/hexadeci.htm dan Anda bisa mendapatkan alpha 0-100 dengan membagi angka dengan 255 dan
mengalikannya
12% alpha: echo "obase=16; ibase=10; (255*12+50)/100" | bc. (50 - untuk pembulatan ke nilai terdekat, itu 100/2 sebenarnya)
vigilancer
195

Pergi jawaban dari @BlondeFurious , di sini adalah beberapa kode Java untuk mendapatkan setiap nilai heksadesimal dari 100% menjadi 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));
}

Keluaran:

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

Versi JavaScript di bawah ini:


Anda juga bisa hanya Google "angka ke hex" di mana 'angka' adalah nilai antara 0 dan 255.

Jared Rummler
sumber
36

Desain Bahan Android

Ini adalah konversi untuk mengatur level opacity warna teks.

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

Teks gelap pada latar belakang terang

masukkan deskripsi gambar di sini

  • Teks utama: DE000000
  • Teks sekunder: 8A000000
  • Teks yang dinonaktifkan, teks petunjuk, dan ikon: 61000000
  • Jangka pembagi garis: 1F000000

Teks putih pada latar belakang gelap

masukkan deskripsi gambar di sini

  • Teks utama: FFFFFFFF
  • Teks sekunder: B3FFFFFF
  • Teks yang dinonaktifkan, teks petunjuk, dan ikon: 80FFFFFF
  • Jangka pembagi garis: 1FFFFFFF

Lihat juga

  • Cari persentase berapa pun di sini .
Suragch
sumber
Kerja luar biasa, terima kasih! Pada 7 Januari 2019, nilai-nilai ini tidak lagi terlihat di halaman Android Material Design yang Anda tautkan. Apakah ini masih nilai-nilai resmi yang direkomendasikan, dan adakah sumber resmi lain yang menyatakannya? Terima kasih!
TheUnwokenFool
@TheUnwokenFool, jawaban ini mungkin sudah usang sekarang. Saya juga tidak melihat apa-apa tentang pengaturan level opacity untuk teks. Jika tampaknya ada kontradiksi, ikuti pedoman saat ini.
Suragch
17

Pada Android, warna dapat ditentukan sebagai RGB atau ARGB.

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

Dalam RGB Anda memiliki dua karakter untuk setiap warna (merah, hijau, biru), dan di ARGB Anda memiliki dua karakter tambahan untuk saluran alpha.

Jadi, jika Anda memiliki 8 karakter, itu ARGB, dengan dua karakter pertama menentukan saluran alpha. Jika Anda menghapus dua karakter utama, itu hanya RGB (warna solid, tanpa alfa / transparansi). Jika Anda ingin menentukan warna dalam kode sumber Java Anda, Anda harus menggunakan:

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

Referensi: argb

alibi
sumber
7

Nilai hex color 8-digit adalah representasi dari ARGB (Alpha, Red, Green, Blue), sedangkan nilai 6-digit hanya mengasumsikan opacity 100% (sepenuhnya buram) dan hanya mendefinisikan nilai-nilai RGB. Jadi untuk membuat ini sepenuhnya buram, Anda dapat menggunakan # FF555555, atau hanya # 555555. Setiap nilai hex 2 digit adalah satu byte, mewakili nilai dari 0-255.

Kevin Coppock
sumber
-1

pada versi chrome baru (mungkin 67.0.3396.62), CSS hex color dapat menggunakan tampilan model ini,

misalnya:

div{
  background-color:#FF00FFcc;
}

cc opacity, tetapi chrome tua tidak mendukung mod itu

Heicks
sumber
Selamat datang di StackOverflow, silakan kunjungi tur . Balasan Anda tidak membantu OP saat ia bertanya tentang warna di Android, bukan Chrome atau HTML.
PE
@PeS kemarin, ya, tetapi Mereka memiliki representasi yang sama.
Heicks