Cách lấy Màu từ Chuỗi màu thập lục phân


Câu trả lời:


592

Hãy thử Colorphương pháp lớp:

public static int parseColor (String colorString)

Từ tài liệu Android :

Các định dạng được hỗ trợ là: #RRGGBB #AARRGGBB 'đỏ', 'xanh', 'xanh', 'đen', 'trắng', 'xám', 'lục lam', 'đỏ tươi', 'vàng', 'ánh sáng', 'bóng tối '


4
Bất cứ ai cũng biết làm thế nào để phân tích #000các giá trị?
Alex Semeniuk

6
Có, chỉ cần làm : if(colorString.length() == 4) { colorString = "#" + StringUtils.repeat(colorString.substring(1, 1), 1) + StringUtils.repeat(colorString.substring(2, 2), 1) + StringUtils.repeat(colorString.substring(3, 3), 1) }, vui lòng sửa cho tôi nếu tôi sai
xdevs23

6
Để thêm vào mã @ xdevs23, hãy thay đổi điều kiện if thành:if(colorString.length() == 4 && colorString[0] == '#')
Zac

Câu trả lời của bạn sẽ tốt hơn nếu bạn không chỉ hiển thị chức năng, mà còn cách sử dụng nó: MyView.setBackgroundColor (Color.parseColor ("# 123456");
Yvonne Marggraf

int red = colorString.charAt (1) == '0'? 0: 255; int blue = colorString.charAt (2) == '0'? 0: 255; int green = colorString.charAt (3) == '0'? 0: 255; Color.rgb (đỏ, xanh dương, xanh lá cây);
GTID

253

Thử:

myLayout.setBackgroundColor(Color.parseColor("#636161"));

4
nếu bạn đang sử dụng xamarin .. mã này là Android.Graphics.Color.PudeColor ("# 636161") với "P" lên Upper
Igor Monteiro

38

Câu hỏi này đưa ra cho một số tìm kiếm liên quan đến màu hex nên tôi sẽ thêm một bản tóm tắt ở đây.

Màu từ int

Màu hex có dạng RRGGBBhoặc AARRGGBB(alpha, đỏ, xanh lá cây, xanh dương). Theo kinh nghiệm của tôi, khi sử dụng inttrực tiếp, bạn cần sử dụng AARRGGBBmẫu đầy đủ . Nếu bạn chỉ có RRGGBBbiểu mẫu thì chỉ cần thêm tiền tố FFvào để làm cho alpha (trong suốt) mờ hoàn toàn. Đây là cách bạn sẽ đặt nó trong mã. Sử dụng 0xlúc đầu có nghĩa là nó là thập lục phân và không phải là cơ sở 10.

int myColor = 0xFF3F51B5;
myView.setBackgroundColor(myColor);

Màu từ chuỗi

Như những người khác đã lưu ý, bạn có thể sử dụng Color.parseStringnhư vậy

int myColor = Color.parseColor("#3F51B5");
myView.setBackgroundColor(myColor);

Lưu ý rằng Chuỗi phải bắt đầu bằng a #. Cả hai RRGGBBAARRGGBBđịnh dạng đều được hỗ trợ.

Màu từ XML

Bạn thực sự nên lấy màu của bạn từ XML bất cứ khi nào có thể. Đây là tùy chọn được đề xuất vì nó giúp việc thay đổi màu sắc cho ứng dụng của bạn dễ dàng hơn nhiều. Nếu bạn đặt nhiều màu lục trong suốt mã của mình thì đó là một nỗi đau lớn để cố gắng thay đổi chúng sau này.

Thiết kế vật liệu Android có vòm màu với các giá trị hex đã được cấu hình.

Những màu chủ đề này được sử dụng trong toàn bộ ứng dụng của bạn và trông như thế này:

màu sắc

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <color name="primary">#3F51B5</color>
  <color name="primary_dark">#303F9F</color>
  <color name="primary_light">#C5CAE9</color>
  <color name="accent">#FF4081</color>
  <color name="primary_text">#212121</color>
  <color name="secondary_text">#757575</color>
  <color name="icons">#FFFFFF</color>
  <color name="divider">#BDBDBD</color>
</resources>

Nếu bạn cần thêm màu, một cách tốt để làm theo là xác định màu của bạn theo hai bước trong xml. Trước tiên, đặt tên màu giá trị hex và sau đó đặt tên cho một thành phần trong ứng dụng của bạn sẽ nhận được một màu nhất định. Điều này giúp bạn dễ dàng điều chỉnh màu sắc sau này. Một lần nữa, đây là trong colors.xml .

<color name="orange">#fff3632b</color>
<color name="my_view_background_color">@color/orange</color>

Sau đó, khi bạn muốn đặt màu trong mã, hãy làm như sau:

int myColor = ContextCompat.getColor(context, R.color.my_view_background_color);    
myView.setBackgroundColor(myColor);

Màu sắc được xác định trước của Android

Lớp Màu đi kèm với một số hằng số màu được xác định trước. Bạn có thể sử dụng nó như thế này.

int myColor = Color.BLUE;
myView.setBackgroundColor(myColor);

Các màu khác là

  • Color.BLACK
  • Color.BLUE
  • Color.CYAN
  • Color.DKGRAY
  • Color.GRAY
  • Color.GREEN
  • Color.LTGRAY
  • Color.MAGENTA
  • Color.RED
  • Color.TRANSPARENT
  • Color.WHITE
  • Color.YELLOW

Ghi chú


22

Chuyển đổi chuỗi đó thành một intmàu có thể được sử dụng trong setBackgroundColorsetTextColor

String string = "#FFFF0000";
int color = Integer.parseInt(string.replaceFirst("^#",""), 16);

Số 16 có nghĩa là số thập lục phân và không phải là 0-9 thông thường của bạn. Kết quả phải giống như

int color = 0xFFFF0000;

làm cách nào tôi có thể chuyển đổi String color = "80000000"; để int màu =?
Ashish Sahu

Tôi nghĩ rằng phiên bản chuỗi không phải là #80000000phiên bản int int color = 0x80000000;. Nếu điều đó không hiệu quả thì hãy đăng một câu hỏi mới với nhiều chi tiết hơn để nhiều người hơn tôi sẽ chú ý đến nó. Hãy ghi nhớ #80000000là một màu đen mờ.
Trường Bryan

Tôi biết int sẽ là int color = 0x80000000 nhưng vấn đề của tôi là cách chuyển đổi nó ... Nhưng bây giờ tôi sẽ tự giải quyết vấn đề của mình bằng int color = parseColor ("#" + "80000000"); ... cảm ơn vì đã trả lời.
Ashish Sahu

Tôi đã có một ngoại lệ khi sử dụng mã của bạn: java.lang.NumberFormatException: Int không hợp lệ: "FFFF0000"
error1337


15

Thử cái này:

vi.setBackgroundColor(Color.parseColor("#FFFF0000"));

12

Tôi sử dụng nó và nó hoạt động rất tốt cho tôi để thiết lập bất kỳ màu nào tôi muốn.

public static final int MY_COLOR = Color.rgb(255, 102, 153);

Đặt màu bằng 0-255 cho mỗi màu đỏ, xanh lục và xanh lam sau đó bất cứ nơi nào bạn muốn màu đó được sử dụng chỉ cần đặt MY_COLOR thay vì Color.BLUE hoặc Color.RED hoặc bất kỳ màu tĩnh nào khác mà lớp Màu cung cấp.

Chỉ cần thực hiện tìm kiếm Google cho biểu đồ màu và bạn có thể tìm thấy biểu đồ có mã RGB chính xác bằng cách sử dụng 0-255.


7

Trong Xamarin Sử dụng cái này

Control.SetBackgroundColor(global::Android.Graphics.Color.ParseColor("#F5F1F1"));

6

Tệp XML được lưu tại res / value / colors.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <color name="opaque_red">#f00</color>
   <color name="translucent_red">#80ff0000</color>
</resources>

Mã ứng dụng này lấy tài nguyên màu:

Resources res = getResources();
int color = res.getColor(R.color.opaque_red);

Bố cục XML này áp dụng màu cho một thuộc tính:

<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textColor="@color/translucent_red"
    android:text="Hello"/>

5

Thay vào đó, hãy thử sử dụng 0xFFF000 và chuyển nó vào phương thức Color.HSVToColor.


2
Tôi hy vọng rằng bạn nên thay thế F thứ ba bằng số không. Trong OP, tôi nghĩ rằng hai ký tự F đầu tiên được sử dụng để đặt độ mờ.
Bryan Field

4

Nếu bạn xác định màu trong XML của mình và muốn sử dụng màu đó để thay đổi màu nền hoặc thứ gì đó thì API này là màu bạn đang tìm kiếm:

 ((TextView) view).setBackgroundResource(R.drawable.your_color_here);

Trong mẫu của tôi, tôi đã sử dụng nó cho TestView


0

Đối với mã Hex rút ngắn

int red = colorString.charAt(1) == '0' ? 0 : 255;
int blue = colorString.charAt(2) == '0' ? 0 : 255;
int green = colorString.charAt(3) == '0' ? 0 : 255;
Color.rgb(red, green,blue);
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.