Vorrei usare un colore da una stringa hexa come "#FFFF0000"
(diciamo) cambiare il colore di sfondo di un layout.
Color.HSVToColor
sembra un vincitore ma prende float[]
un parametro.
Sono vicino alla soluzione?
Vorrei usare un colore da una stringa hexa come "#FFFF0000"
(diciamo) cambiare il colore di sfondo di un layout.
Color.HSVToColor
sembra un vincitore ma prende float[]
un parametro.
Sono vicino alla soluzione?
Risposte:
Prova il Color
metodo 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 '
#000
valori?
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
if(colorString.length() == 4 && colorString[0] == '#')
Provare:
myLayout.setBackgroundColor(Color.parseColor("#636161"));
Questa domanda si presenta per una serie di ricerche relative al colore esadecimale, quindi aggiungerò un riepilogo qui.
I colori esadecimali assumono la forma RRGGBB
o AARRGGBB
(alfa, rosso, verde, blu). Nella mia esperienza, quando si utilizza int
direttamente, è necessario utilizzare il AARRGGBB
modulo completo . Se hai solo il RRGGBB
modulo, aggiungi il prefisso FF
per rendere l'alfa (trasparenza) completamente opaca. Ecco come lo imposteresti nel codice. L'uso 0x
all'inizio significa che è esadecimale e non base 10.
int myColor = 0xFF3F51B5;
myView.setBackgroundColor(myColor);
Come altri hanno già notato, puoi usare Color.parseString
così
int myColor = Color.parseColor("#3F51B5");
myView.setBackgroundColor(myColor);
Si noti che la stringa deve iniziare con a #
. Sia RRGGBB
e AARRGGBB
formati sono supportati.
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);
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
Converti quella stringa in un int
colore che può essere usato in setBackgroundColor
esetTextColor
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;
#80000000
nel 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.
Suo
int color = Color.parseColor("colorstring");
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.
In Xamarin Usa questo
Control.SetBackgroundColor(global::Android.Graphics.Color.ParseColor("#F5F1F1"));
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"/>
Prova invece a utilizzare 0xFFF000 e passalo nel metodo Color.HSVToColor.