Chuyển đổi giá trị màu hex (#ffffff) thành giá trị số nguyên


88

Tôi đang nhận các giá trị màu hex từ máy chủ (trong biểu mẫu này #xxxxxx, ví dụ: #000000màu đen)

Làm cách nào để chuyển giá trị này thành giá trị số nguyên?

Tôi đã cố gắng làm Integer.valueOf("0x" + passedColor.substring(1, passedColor.length()))để có được một 0x000000kết quả thậm chí còn dẻo dai hơn , nhưng đây không phải là một intgợi ý ở đây, bất kỳ đề xuất nào khác?

Tôi nhận được một lỗi: 08-03 21:06:24.673: ERROR/AndroidRuntime(20231): java.lang.NumberFormatException: unable to parse '0x00C8FBFE' as integer

Tôi đang sử dụng Android SDK cho setBackgroundColor(int color)chức năng của chúng , điều này nhận - như bạn có thể đoán - một giá trị màu nguyên.

Đây là CƠ HỘI của câu hỏi này: Làm thế nào để chuyển đổi một số nguyên màu thành một Chuỗi hex trong Android?


Vì một số lý do mà tôi không thể đăng ... Bạn sắp hoàn tất, nhưng bạn cần valueOfphương thức hai đối số , nơi bạn chỉ định đầu vào chuỗi (tất nhiên là không có #) và cơ số, chỉ định cơ số. Integer.valueOf(passedColor.substring(1, passedColor.length()), 16) Điều này có thể được thực hiện với bất kỳ cơ sở số nguyên nào! download.oracle.com/javase/6/docs/api/java/lang/... , int)
ty1824

Vâng, tôi cũng không thể đăng câu trả lời của mình. Mặc dù vậy, Mike Samuel đã nói khá nhiều điều tôi sẽ nói.
ssell

Câu trả lời:


182

Câu trả lời thực sự là sử dụng:

Color.parseColor(myPassedColor)trong Android, myPassedColorhexgiá trị như #000hoặc #000000hoặc #00000000.

Tuy nhiên, chức năng này không hỗ trợ các giá trị hex viết tắt như #000.


9
Thật không may trong không phân tích cú pháp giá trị như thế nào #000. Xem tài liệu
Alex Semeniuk

@CQM cách phân tích cú pháp màu hex viết tắt, như thế nào #ccc. Còn cách nào khác không?
Kavita_p

30

Trả lời rất đơn giản các bạn ạ, trong android nếu muốn chuyển hex color sang int thì chỉ cần sử dụng lớp Color của android , ví dụ như hình bên dưới

cái này dành cho màu xám nhạt

Color.parseColor("#a8a8a8");

Đó là nó và bạn sẽ nhận được kết quả của bạn.


Và chỉ cần nói rõ về cách sử dụng: someText.setTextColor (Color.parseColor ("# f9e6ff"))
Brian M

15
Integer.parseInt(myString.replaceFirst("#", ""), 16) 

2
Cảm ơn vì gợi ý, tôi đã thử điều này ngay bây giờ nhưng không có kết quả và hóa ra một hàm Android đi kèm là loại kết quả màu duy nhất hoạt động, mặc dù cả hai đều trả về int. Color.parseColor (myPassedColor)) Tôi không nghĩ rằng đây là một vấn đề cụ thể android, nhưng lần lượt ra đó là
CQM

4
Tôi không biết tại sao mọi người ủng hộ điều này; nó không hoạt động !! Các màu ở đây đang được lưu trữ trong 32 bit nên việc in chúng sẽ làm cho chúng hiển thị lâu hơn. parseInt tìm kiếm một dấu `- 'rõ ràng để biểu thị một âm và không tôn trọng bit dấu cho int hoặc longs. Như vậy nó sẽ cho sai số.
Christian Chapman,

1
@enthdegree, Để trích dẫn OP, "Tôi đang nhận các giá trị màu hex từ máy chủ (ở dạng này, #xxxxxx" vì vậy các màu mà OP xử lý là 24 bit không phải 32 bit; không có kênh alpha.
Mike Samuel

1
@AllDayAmazing, '#' không phải là chữ số thập lục phân, dấu hoặc dấu phân cách thập phân, vì vậy parseIntsẽ không thành công nếu tìm thấy nó trên đầu vào.
Mike Samuel

Sai lầm của tôi, tôi đã ăn sâu vào những gì tôi đang làm nên tôi đã đọc nhanh và thấy rõ parseColor(). Bạn rất đúng.
AllDayAmazing

7

Tôi có cùng một vấn đề rằng tôi tìm thấy một số màu ở dạng #AAAAAAvà tôi muốn chuyển đổi màu đó thành một dạng mà android có thể sử dụng. Tôi thấy rằng bạn chỉ có thể sử dụng 0xFFAAAAAAđể android có thể tự động cho biết màu sắc. Lưu ý đầu tiên FFalphagiá trị nói . Hy vọng nó giúp


4

Câu trả lời thực sự là đơn giản và dễ dàng nhất này ....

String white = "#ffffff";
int whiteInt = Color.parseColor(white);

3

Tôi đã phải đối mặt với cùng một vấn đề. Bằng cách này tôi đã có thể giải quyết nó. Như CQM đã nói, sử dụng Color.parseColor () là một giải pháp tốt cho vấn đề này.

Đây là mã tôi đã sử dụng:

this.Button_C.setTextColor(Color.parseColor(prefs.getString("color_prefs", String.valueOf(R.color.green))));

Trong trường hợp này, mục tiêu của tôi là thay đổi màu văn bản của Nút (Button_C) khi tôi thay đổi lựa chọn màu từ Tùy chọn của mình (color_prefs).



1

Nhận Mã màu Tùy chọn Chia sẻ trong Chuỗi, sau đó Chuyển đổi thành số nguyên và thêm màu bố cục-nền:

    sharedPreferences = getSharedPreferences(mypref, Context.MODE_PRIVATE);
    String sw=sharedPreferences.getString(name, "");
    relativeLayout.setBackgroundColor(Color.parseColor(sw));

0

Hãy thử điều này, tạo có thể vẽ trong tài nguyên của bạn ...

<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <solid android:color="@color/white"/>
    <size android:height="20dp"
        android:width="20dp"/>
</shape>

sau đó sử dụng...

 Drawable mDrawable = getActivity().getResources().getDrawable(R.drawable.bg_rectangle_multicolor);
mDrawable.setColorFilter(Color.parseColor(color), PorterDuff.Mode.SRC_IN);
mView1.setBackground(mDrawable);

với màu ... "#FFFFFF"

nếu màu trong suốt, hãy sử dụng ... setAlpha

mView1.setAlpha(x); với x float 0-1 Ej (0.9f)

Chúc may mắn

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.