Come ottenere un colore dalla stringa di colore esadecimale


Risposte:


592

Prova il Colormetodo di classe:

public static int parseColor (String colorString)

Dalla documentazione di Android :

I formati supportati sono: #RRGGBB #AARRGGBB 'rosso', 'blu', 'verde', 'nero', 'bianco', 'grigio', 'ciano', 'magenta', 'giallo', 'lightgray', 'darkgray '


4
Qualcuno sa come analizzare i #000valori?
Alex Semeniuk,

6
Sì, basta: per 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) }favore correggimi se sbaglio
xdevs23

6
Per aggiungere al codice @ xdevs23, modifica la condizione if in questo:if(colorString.length() == 4 && colorString[0] == '#')
Zac

La tua risposta sarebbe migliore se non solo mostrassi la funzione, ma anche come usarla: 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 (rosso, blu, verde);
GTID

253

Provare:

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

4
se stai usando xamarin .. il codice è questo Android.Graphics.Color.ParseColor ("# 636161") con "P" in alto
Igor Monteiro,

38

Questa domanda si presenta per una serie di ricerche relative al colore esadecimale, quindi aggiungerò un riepilogo qui.

Colore da int

I colori esadecimali assumono la forma RRGGBBo AARRGGBB(alfa, rosso, verde, blu). Nella mia esperienza, quando si utilizza intdirettamente, è necessario utilizzare il AARRGGBBmodulo completo . Se hai solo il RRGGBBmodulo, aggiungi il prefisso FFper rendere l'alfa (trasparenza) completamente opaca. Ecco come lo imposteresti nel codice. L'uso 0xall'inizio significa che è esadecimale e non base 10.

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

Colore da stringa

Come altri hanno già notato, puoi usare Color.parseStringcosì

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

Si noti che la stringa deve iniziare con a #. Sia RRGGBBe AARRGGBBformati sono supportati.

Colore da XML

Dovresti effettivamente ottenere i tuoi colori da XML ogni volta che è possibile. Questa è l'opzione consigliata perché rende molto più semplice apportare modifiche di colore alla tua app. Se imposti molti colori esadecimali in tutto il codice, provare a cambiarli in seguito è un grosso problema.

Il design del materiale Android ha i palati dei colori con i valori esadecimali già configurati.

Questi colori del tema vengono utilizzati in tutta l'app e si presentano così:

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>

Se hai bisogno di colori aggiuntivi, una buona pratica da seguire è quella di definire il tuo colore in due passaggi in XML. Denominare innanzitutto il colore del valore esadecimale, quindi denominare un componente dell'app che dovrebbe ottenere un determinato colore. Ciò semplifica la regolazione dei colori in un secondo momento. Ancora una volta, questo è in colors.xml .

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

Quindi, quando si desidera impostare il colore nel codice, procedere come segue:

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

Colori predefiniti Android

La classe Color viene fornita con una serie di costanti di colore predefinite. Puoi usarlo in questo modo.

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

Altri colori sono

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

Appunti


22

Converti quella stringa in un intcolore che può essere usato in setBackgroundColoresetTextColor

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

Il 16 significa che è esadecimale e non il tuo normale 0-9. Il risultato dovrebbe essere lo stesso di

int color = 0xFFFF0000;

come posso convertire String color = "80000000"; a int color =?
Ashish Sahu,

Penso che la versione di stringa dovrebbe essere #80000000nel qual caso sarebbe la versione int int color = 0x80000000;. Se il problema persiste, pubblica una nuova domanda con più dettagli in modo che più persone di me se ne accorgano. Tieni presente che #80000000è un colore nero traslucido.
Bryan Field,

So che int sarebbe int color = 0x80000000 ma il mio problema è come convertirlo ... Ma ora risolverò il mio problema con int color = parseColor ("#" + "80000000"); ... grazie per la risposta.
Ashish Sahu,

Ho ricevuto un'eccezione usando il tuo codice: java.lang.NumberFormatException: int non valido: "FFFF0000"
errore 1337


15

Prova questo:

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

12

Lo uso e funziona benissimo per me per impostare qualsiasi colore che voglio.

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

Imposta i colori usando 0-255 per ogni rosso, verde e blu, quindi ovunque tu voglia quel colore usato basta mettere MY_COLOR invece di Color.BLUE o Color.RED o uno qualsiasi degli altri colori statici offerti dalla classe Color.

Basta fare una ricerca su Google per la tabella dei colori e puoi trovare una tabella con i codici RGB corretti usando 0-255.


7

In Xamarin Usa questo

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

6

File XML salvato in res / valori / colors.xml:

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

Questo codice dell'applicazione recupera la risorsa colore:

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

Questo XML di layout applica il colore a un attributo:

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

5

Prova invece a utilizzare 0xFFF000 e passalo nel metodo Color.HSVToColor.


2
Mi aspetto che tu debba sostituire quella terza F con uno zero. Nell'OP, penso che i primi due caratteri F siano usati per impostare l'opacità.
Bryan Field

4

Se definisci un colore nel tuo XML e vuoi usarlo per cambiare il colore di sfondo o qualcosa di simile questa API è quella che stai cercando:

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

Nel mio esempio l'ho usato per TestView


0

Per codice esadecimale abbreviato

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);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.