Cara mendapatkan Warna dari String Warna heksadesimal


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 '


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"));

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


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;

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


15

Coba ini:

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

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.


7

Di Xamarin Gunakan ini

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

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"/>

5

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


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


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);
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.