Hiểu màu sắc trên Android (sáu ký tự)


212

Tôi đang cố gắng hiểu làm thế nào màu sắc hoạt động trong Android. Tôi có màu này được đặt làm nền của tôi LinearLayoutvà tôi có màu xám với độ trong suốt:

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

Nếu tôi loại bỏ hai ký tự cuối cùng (55), tôi sẽ có được màu đồng nhất, mất độ trong suốt. Tôi đã cố gắng tìm một trang mà tôi có thể thấy một số lời giải thích về điều này, nhưng tôi không thể tìm thấy nó.

Câu trả lời:


170

Nếu bạn cung cấp 6 chữ số hex, có nghĩa là RGB (2 chữ số hex cho mỗi giá trị đỏ, lục và lam).

Nếu bạn cung cấp 8 chữ số hex, thì đó là ARGB (2 chữ số hex cho mỗi giá trị tương ứng là alpha, đỏ, xanh lục và xanh lam).

Vì vậy, bằng cách xóa 55 cuối cùng, bạn đang thay đổi từ A = B4, R = 55, G = 55, B = 55 (một màu xám chủ yếu trong suốt), thành R = B4, G = 55, B = 55 (không hoàn toàn -transparent sẫm màu hồng hào).

Xem tài liệu "Màu" cho các định dạng được hỗ trợ.


Và làm thế nào để thiết lập độ trong suốt của textView thông qua mã? Tôi muốn chuyển đổi giá trị ARGB thành int, vì vậy tôi có thể sử dụng nó sau đó trong phương thức textView.setBackgroundColor (int color). Có thể không? Bất kỳ cách nào khác để đạt được nó?
Marek

@Marek: Giá trị ARGB int, hiệu quả. Xem các tài liệu tại developer.android.com/reference/android/graphics/Color.html (tìm <<trong trang).
Jon Skeet

nhưng nó không được định dạng là #AARRGGBB. Sau đó, nó được hình thành là 0xAARRGGBB. Đó là lý do tại sao tôi không thể sử dụng nó trong phương thức setBackgroundColor. Tôi có thể sử dụng Color.parseColor ("# AARRGGBB)
Marek

@Marek: Nó không "được định dạng" - nó chỉ là một số nguyên. Bạn có thể kết hợp các bit khác nhau như được liệt kê trong tài liệu.
Jon Skeet

1
@ Toaster: Không, minh bạch.
Jon Skeet

1184

Android sử dụng các giá trị ARGB thập lục phân, được định dạng là #AARRGGBB. Cặp chữ cái đầu tiên đó, AA, đại diện cho kênh alpha. Bạn phải chuyển đổi giá trị độ mờ thập phân của mình thành giá trị thập lục phân. Dưới đây là các bước:

Quá trình giá trị Alpha Hex

  1. Lấy độ mờ của bạn làm giá trị thập phân và nhân nó với 255. Vì vậy, nếu bạn có một khối mờ 50% thì giá trị thập phân sẽ là 0,5. Ví dụ: .5 x 255 = 127,5
  2. Phân số sẽ không chuyển thành thập lục phân, do đó bạn phải làm tròn số của mình lên hoặc xuống thành số nguyên gần nhất. Ví dụ: 127,5 vòng lên tới 128; 55,25 vòng xuống còn 55.
  3. Nhập giá trị thập phân của bạn trong bộ chuyển đổi thập phân sang thập lục phân, như http://www.binaryhexconverter.com/decimal-to-hex-converter và chuyển đổi giá trị của bạn.
  4. Nếu bạn chỉ nhận lại một giá trị duy nhất, hãy đặt tiền tố bằng 0. Ví dụ: nếu bạn đang cố gắng đạt được độ mờ 5% và bạn đang trải qua quá trình này, bạn sẽ kết thúc với giá trị thập lục phân của D. Thêm một số 0 ở phía trước để nó xuất hiện dưới dạng 0D.

Đó là cách bạn tìm thấy giá trị kênh alpha. Tôi đã tự do đưa ra một danh sách các giá trị cho bạn. Thưởng thức!

Giá trị độ mờ Hex

  • 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

37
Hướng dẫn thiết kế màu dựa trên Android Chất liệu: google.com/design/spec/style/ Kẻ Thêm khóa Giá trị độ mờ Hex: 100%: FF 87%: DE 70%: B3 54%: 8A 30%: 4D 26%: 42 12 %: 1F
cn123h

ở đây bạn tìm thấy tất cả các giá trị: dtp-aus.com/hexadeci.htm và bạn có thể nhận được alpha 0-100 bằng cách chia số cho 255 và nhân nó với 100. hy vọng nó sẽ giúp bạn
Niib Fouda

cho 12% alpha : echo "obase=16; ibase=10; (255*12+50)/100" | bc. (+50 - để làm tròn đến giá trị gần nhất, thực tế là 100/2)
cảnh giác

195

Đi tắt câu trả lời từ @BlondeFurious , đây là một số mã Java để nhận được mỗi giá trị thập lục phân từ 100% xuống còn 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));
}

Đầu ra:

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

Một phiên bản JavaScript bên dưới:


Bạn cũng có thể chỉ Google "number to hex" trong đó 'number' là bất kỳ giá trị nào trong khoảng từ 0 đến 255.


36

Thiết kế vật liệu Android

Đây là các chuyển đổi để đặt mức độ mờ của màu văn bản.

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

Văn bản tối trên nền sáng

nhập mô tả hình ảnh ở đây

  • Văn bản chính: DE000000
  • Văn bản phụ: 8A000000
  • Văn bản bị vô hiệu hóa, văn bản gợi ý và biểu tượng: 61000000
  • Dải phân cách: 1F000000

Văn bản màu trắng trên nền tối

nhập mô tả hình ảnh ở đây

  • Văn bản chính: FFFFFFFF
  • Văn bản phụ: B3FFFFFF
  • Văn bản bị vô hiệu hóa, văn bản gợi ý và biểu tượng: 80FFFFFF
  • Dải phân cách: 1FFFFFFF

Xem thêm

  • Tra cứu bất kỳ tỷ lệ nào ở đây .

Tuyệt vời, cảm ơn! Kể từ ngày 7 tháng 1 năm 2019, các giá trị này không còn hiển thị trong trang Thiết kế Vật liệu Android mà bạn đã liên kết. Đây có phải vẫn là các giá trị được đề xuất chính thức không, và có một nguồn chính thức nào khác được nêu không? Cảm ơn!
TheUnwokenFool

@TheUnwokenFool, câu trả lời này có thể đã lỗi thời. Tôi không thấy bất cứ điều gì về việc thiết lập mức độ mờ cho văn bản. Nếu có bất kỳ mâu thuẫn nào đi với hướng dẫn hiện tại.
Suragch

17

Trên Android, màu sắc có thể được chỉ định là RGB hoặc ARGB.

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

Trong RGB, bạn có hai ký tự cho mỗi màu (đỏ, xanh lục, xanh lam) và trong ARGB, bạn có hai ký tự bổ sung cho kênh alpha.

Vì vậy, nếu bạn có 8 ký tự, đó là ARGB, với hai ký tự đầu tiên chỉ định kênh alpha. Nếu bạn loại bỏ hai ký tự hàng đầu thì đó chỉ là RGB (màu đơn sắc, không có alpha / trong suốt). Nếu bạn muốn chỉ định một màu trong mã nguồn Java của mình, bạn phải sử dụng:

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

Tham khảo: argb


7

Giá trị màu lục giác 8 chữ số là đại diện của ARGB (Alpha, Red, Green, Blue), trong khi giá trị 6 chữ số chỉ giả định độ mờ 100% (mờ hoàn toàn) và chỉ xác định các giá trị RGB. Vì vậy, để làm cho điều này hoàn toàn mờ đục, bạn có thể sử dụng # FF555555 hoặc chỉ # 555555. Mỗi giá trị hex 2 chữ số là một byte, biểu thị các giá trị từ 0-255.


-1

ở phiên bản chrome mới (có thể là 67.0.3394.62), màu hex CSS có thể sử dụng mô hình này,

ví dụ:

div{
  background-color:#FF00FFcc;
}

cc là opacity, nhưng chrome cũ không hỗ trợ mod đó


Chào mừng bạn đến với StackOverflow, vui lòng truy cập tour . Câu trả lời của bạn không giúp ích gì cho OP khi anh ấy hỏi về màu sắc trong Android, không phải Chrome hay HTML.
PeS

@PeS ngày hôm qua, vâng, nhưng họ có cùng đại diện.
Heicks
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.