Cara mendapatkan Warna dari String Warna heksadesimal

305

Saya ingin menggunakan warna dari string heksa seperti "#FFFF0000"untuk (katakanlah) mengubah warna latar belakang Layout. Color.HSVToColorterlihat seperti pemenang tetapi dibutuhkan float[]sebagai parameter.

Apakah saya sudah dekat dengan solusi?

Johann
sumber
Kemungkinan duplikat dari Mengubah string warna android dalam runtime ke int
Shubham A.

Jawaban:

592

Coba Colormetode kelas:

public static int parseColor (String colorString)

Dari dokumentasi Android :

Format yang didukung adalah: #RRGGBB #AARRGGBB 'merah', 'biru', 'hijau', 'hitam', 'putih', 'abu-abu', 'cyan', 'magenta', 'kuning', 'lightgray', 'darkgray '

jitro
sumber
4
Adakah yang tahu cara mem-parsing #000nilai?
Alex Semeniuk
6
Ya, lakukan saja 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) }
:,
6
Untuk menambahkan kode @ xdevs23, ubah ketentuan if ke ini:if(colorString.length() == 4 && colorString[0] == '#')
Zac
Jawaban Anda akan lebih baik jika Anda tidak hanya menunjukkan fungsi, tetapi juga bagaimana menggunakannya: 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 (merah, biru, hijau);
GTID
253

Mencoba:

myLayout.setBackgroundColor(Color.parseColor("#636161"));
invisbo
sumber
4
jika Anda menggunakan xamarin .. kodenya adalah Android.Graphics.Color.ParseColor ini ("# 636161") dengan "P" ke Atas
Igor Monteiro
38

Pertanyaan ini muncul untuk sejumlah pencarian terkait dengan warna hex jadi saya akan menambahkan ringkasan di sini.

Warna dari int

Warna heks mengambil bentuk RRGGBBatau AARRGGBB(alfa, merah, hijau, biru). Dalam pengalaman saya, saat menggunakan secara intlangsung, Anda harus menggunakan AARRGGBBformulir lengkap . Jika Anda hanya memiliki RRGGBBformulir maka awali saja dengan FFuntuk membuat alpha (transparansi) sepenuhnya buram. Inilah cara Anda mengaturnya dalam kode. Menggunakan 0xdi awal berarti itu heksadesimal dan bukan basis 10.

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

Warna dari string

Seperti yang telah dicatat orang lain, Anda dapat menggunakannya Color.parseStringseperti itu

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

Perhatikan bahwa String harus dimulai dengan a #. Keduanya RRGGBBdan AARRGGBBformat didukung.

Warna dari XML

Anda harus benar-benar mendapatkan warna dari XML jika memungkinkan. Ini adalah opsi yang disarankan karena membuatnya lebih mudah untuk membuat perubahan warna pada aplikasi Anda. Jika Anda menetapkan banyak warna hex di seluruh kode Anda, maka akan sangat sulit untuk mencoba mengubahnya nanti.

Desain material Android memiliki langit-langit warna dengan nilai hex sudah dikonfigurasi.

Warna-warna tema ini digunakan di seluruh aplikasi Anda dan terlihat seperti ini:

colors.xml

<?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>

Jika Anda membutuhkan warna tambahan, praktik yang baik untuk diikuti adalah mendefinisikan warna Anda dalam dua langkah dalam xml. Pertama beri nama warna nilai hex dan kemudian beri nama komponen aplikasi Anda yang harus mendapatkan warna tertentu. Ini membuatnya mudah untuk menyesuaikan warna nanti. Sekali lagi, ini ada dalam colors.xml .

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

Kemudian ketika Anda ingin mengatur warna dalam kode, lakukan hal berikut:

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

Android warna yang ditentukan sebelumnya

Kelas Warna hadir dengan sejumlah konstanta warna yang telah ditentukan. Anda bisa menggunakannya seperti ini.

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

Warna lainnya adalah

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

Catatan

Suragch
sumber
22

Ubah string itu menjadi intwarna yang dapat digunakan dalam setBackgroundColordansetTextColor

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

16 berarti hexadecimal dan bukan 0-9 reguler Anda. Hasilnya harus sama dengan

int color = 0xFFFF0000;
Bryan Field
sumber
bagaimana saya bisa mengubah warna String = "80000000"; ke int color =?
Ashish Sahu
Saya pikir versi string seharusnya #80000000dalam hal versi int akan int color = 0x80000000;. Jika itu tidak berhasil maka posting pertanyaan baru dengan lebih detail sehingga lebih banyak orang daripada saya akan melihatnya. Yang perlu diingat #80000000adalah warna hitam yang bening.
Lapangan Bryan
Saya tahu int akan menjadi int color = 0x80000000 tapi masalah saya adalah bagaimana mengubahnya ... Tapi sekarang saya akan menyelesaikan masalah saya sendiri dengan int color = parseColor ("#" + "80000000"); ... terima kasih atas balasannya.
Ashish Sahu
Saya mendapat pengecualian menggunakan kode Anda: java.lang.NumberFormatException: Int tidak valid: "FFFF0000"
error1337
16

Nya

int color =  Color.parseColor("colorstring");
Patricia Heimfarth
sumber
15

Coba ini:

vi.setBackgroundColor(Color.parseColor("#FFFF0000"));
MindBrain
sumber
12

Saya menggunakan ini dan itu berfungsi baik bagi saya untuk mengatur warna apa pun yang saya inginkan.

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

Tetapkan warna menggunakan 0-255 untuk setiap merah, hijau dan biru lalu di mana pun Anda menginginkan warna yang digunakan, cukup masukkan MY_COLOR alih-alih Color.BLUE atau Color.RED atau warna statis lainnya yang ditawarkan kelas Warna.

Lakukan pencarian Google untuk bagan warna dan Anda dapat menemukan bagan dengan kode RGB yang benar menggunakan 0-255.

Opy
sumber
7

Di Xamarin Gunakan ini

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

File XML disimpan di res / values ​​/ colors.xml:

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

Kode aplikasi ini mengambil sumber daya warna:

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

Layout XML ini menerapkan warna ke atribut:

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

Coba gunakan 0xFFF000 dan berikan itu ke metode Color.HSVToColor.

Dave Long
sumber
2
Saya berharap Anda harus mengganti F ketiga dengan nol. Dalam OP, saya pikir dua karakter F pertama digunakan untuk mengatur opacity.
Lapangan Bryan
4

Jika Anda menentukan warna dalam XML Anda dan ingin menggunakannya untuk mengubah warna latar belakang atau sesuatu API ini adalah yang Anda cari:

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

Dalam sampel saya, saya menggunakannya untuk TestView

M.Hefny
sumber
0

Untuk kode Hex yang dipersingkat

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);
GTID
sumber