Ubah nilai warna hex (#ffffff) menjadi nilai integer

89

Saya menerima nilai warna hex dari server (dalam bentuk ini #xxxxxx, misalnya #000000untuk hitam)

Bagaimana cara mengubahnya menjadi nilai integer?

Saya mencoba melakukan Integer.valueOf("0x" + passedColor.substring(1, passedColor.length()))untuk mendapatkan hasil yang lebih kuat 0x000000, tetapi ini tidak ditafsirkan sebagai di intsini, ada saran lain?

Saya menerima kesalahan: 08-03 21:06:24.673: ERROR/AndroidRuntime(20231): java.lang.NumberFormatException: unable to parse '0x00C8FBFE' as integer

Saya menggunakan Android SDK untuk setBackgroundColor(int color)fungsinya, yang membutuhkan - seperti yang bisa Anda duga - nilai warna integer.

Ini adalah LAWAN dari pertanyaan ini: Bagaimana cara mengubah integer warna menjadi String hex di Android?

CQM
sumber
Adapun beberapa alasan saya tidak dapat memposting ... Anda hampir sampai, tetapi Anda memerlukan metode dua argumen valueOf, di mana Anda menentukan input string (tanpa #, tentu saja) dan radix, yang menentukan basis. Integer.valueOf(passedColor.substring(1, passedColor.length()), 16) Ini dapat dilakukan dengan basis bilangan bulat apa pun! download.oracle.com/javase/6/docs/api/java/lang/… , int)
ty1824
Ya, saya juga tidak dapat memposting tanggapan saya. Mike Samuel cukup banyak mengatakan apa yang akan saya katakan.
jual
Kemungkinan duplikat Cara mendapatkan Warna dari String Warna heksadesimal
pengguna2340612

Jawaban:

184

Jawaban sebenarnya adalah dengan menggunakan:

Color.parseColor(myPassedColor)di Android, myPassedColormenjadi hexnilai seperti #000atau #000000atau #00000000.

Namun, fungsi ini tidak mendukung nilai hex singkatan seperti #000.

CQM
sumber
9
Sayangnya di tidak mengurai nilai like #000. Lihat dokumentasi
Alex Semeniuk
@CQM cara mengurai singkatan warna hex, seperti #ccc. Apakah ada cara lain?
Kavita_p
32

Jawabannya simpel banget guys, di android jika ingin merubah warna hex menjadi int, gunakan saja kelas Color android , contoh gambar dibawah ini

ini untuk warna abu-abu terang

Color.parseColor("#a8a8a8");

Itu saja dan Anda akan mendapatkan hasil Anda.

Ashana.Jackol
sumber
Dan jelaskan tentang cara menggunakan: someText.setTextColor (Color.parseColor ("# f9e6ff"))
Brian M
15
Integer.parseInt(myString.replaceFirst("#", ""), 16) 
Mike Samuel
sumber
2
terima kasih atas sarannya, saya mencoba ini sekarang tidak berhasil, dan ternyata fungsi Android yang disertakan adalah satu-satunya jenis hasil warna yang berfungsi, meskipun keduanya mengembalikan int. Color.parseColor (myPassedColor)) Saya tidak berpikir ini adalah masalah khusus Android, tetapi ternyata
CQM
4
Saya tidak tahu mengapa orang-orang memilih ini; itu tidak berhasil !! Warna-warna di sini disimpan dalam 32 bit sehingga mencetaknya membuatnya ditampilkan sepanjang waktu. parseInt mencari `- 'eksplisit untuk menunjukkan negatif, dan tidak menghormati bit tanda untuk int atau long. Sehingga akan memberikan angka yang salah.
Christian Chapman
1
@enthdegree, Mengutip OP, "Saya menerima nilai warna hex dari server (dalam bentuk ini, #xxxxxx" jadi warna yang ditangani OP adalah 24 bit bukan 32 bit; tidak ada saluran alfa.
Mike Samuel
1
@AllDayAmazing, '#' bukan digit hex, tanda, atau pemisah desimal jadi parseIntakan gagal jika menemukannya pada input.
Mike Samuel
Kesalahan saya, saya begitu tertanam dalam apa yang saya lakukan sehingga saya membacanya dengan cepat dan melihatnya parseColor(). Anda sangat benar.
AllDayAmazing
7

Saya memiliki masalah yang sama dengan yang saya temukan dalam bentuk warna #AAAAAAdan saya ingin mengubahnya menjadi bentuk yang dapat digunakan oleh android. Saya menemukan bahwa Anda hanya dapat menggunakan 0xFFAAAAAAsehingga android dapat secara otomatis mengetahui warnanya. Perhatikan yang pertama FFadalah alphanilai jitu . Semoga membantu

Fei
sumber
4

Jawaban sebenarnya adalah yang paling sederhana dan termudah ini ....

String white = "#ffffff";
int whiteInt = Color.parseColor(white);
Milad Faridnia
sumber
3

Saya menghadapi masalah yang sama. Dengan cara ini saya bisa menyelesaikannya. Seperti yang dikatakan CQM, menggunakan Color.parseColor () adalah solusi yang baik untuk masalah ini.

Ini kode yang saya gunakan:

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

Dalam hal ini target saya adalah mengubah warna teks Tombol (Button_C) ketika saya mengubah pemilihan warna dari Preferensi saya (color_prefs).

RunningWheels
sumber
1

Berdasarkan CQM 's jawaban dan ovokerie-ogbeta ' s jawaban untuk pertanyaan lain saya sudah datang dengan solusi ini:

if (colorAsString.length() == 4) { // #XXX
    colorAsString = colorAsString.replaceAll("#([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])", "#$1$1$2$2$3$3");
}

int color = Color.parseColor(colorAsString);
MikeL
sumber
1

Dapatkan Kode Warna Preferensi Bersama dalam String lalu Konversikan ke integer dan tambahkan warna latar belakang tata letak:

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

Coba ini, buat drawable di resource Anda ...

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

lalu gunakan ...

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

dengan warna ... "#FFFFFF"

jika warnanya transparan gunakan ... setAlpha

mView1.setAlpha(x); dengan x float 0-1 Ej (0.9f)

Semoga berhasil

Gaston Cufre
sumber