Converti il ​​valore del colore esadecimale (#ffffff) in un valore intero


89

Ricevo valori di colore esadecimali da un server (in questa forma #xxxxxx, ad esempio #000000per il nero)

Come lo converto in un valore intero?

Ho provato a fare Integer.valueOf("0x" + passedColor.substring(1, passedColor.length()))per ottenere un risultato ancora più estastico 0x000000, ma questo non è interpretato come un intqui, altri suggerimenti?

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

Sto usando l'SDK di Android per la loro setBackgroundColor(int color)funzione, che richiede, come avrai intuito, un valore di colore intero.

Questo è l'opposto di questa domanda: come convertire un intero di colore in una stringa esadecimale in Android?


Per quanto riguarda qualche motivo non riesco a postare ... Ci sei quasi, ma hai bisogno del valueOfmetodo a due argomenti , dove specifichi la stringa di input (senza il #, ovviamente) e la radice, che specifica la base. Integer.valueOf(passedColor.substring(1, passedColor.length()), 16) Questo può essere fatto con qualsiasi base intera! download.oracle.com/javase/6/docs/api/java/lang/… , int)
ty1824

Sì, anche io non sono stato in grado di pubblicare la mia risposta. Mike Samuel ha praticamente detto quello che stavo per dire.
vende il

Risposte:



32

La risposta è davvero semplice ragazzi, in Android se vuoi convertire il colore esadecimale in int, usa la classe Colore Android , esempio mostrato di seguito

questo è per il colore grigio chiaro

Color.parseColor("#a8a8a8");

Questo è tutto e otterrai il tuo risultato.


E metti in chiaro come usare: someText.setTextColor (Color.parseColor ("# f9e6ff"))
Brian M

15
Integer.parseInt(myString.replaceFirst("#", ""), 16) 

2
grazie per il suggerimento, l'ho provato solo ora senza alcun risultato e si scopre che una funzione Android inclusa era l'unico tipo di risultato colore che funziona, anche se entrambi restituiscono int. Color.parseColor (myPassedColor)) Non pensavo si trattasse di un problema specifico di Android, ma ho scoperto che era
CQM

4
Non so perché la gente abbia votato positivamente; non funziona !! I colori qui vengono memorizzati in 32 bit quindi stamparli li fa visualizzare più a lungo. parseInt cerca un `- 'esplicito per denotare un negativo e non rispetta il bit di segno per int o long. Quindi darà il numero sbagliato.
Christian Chapman

1
@enthdegree, per citare l'OP, "Sto ricevendo valori di colore esadecimali da un server (in questa forma, #xxxxxx" quindi i colori trattati dall'OP sono 24 bit non 32 bit; non esiste un canale alfa.
Mike Samuel

1
@AllDayAmazing, "#" non è una cifra esadecimale, un segno o un separatore decimale, quindi parseIntnon funzionerà se lo trova nell'input.
Mike Samuel

Errore mio, sono così radicato in quello che sto facendo che l'ho letto velocemente e ho visto parseColor(). Hai ragione.
AllDayAmazing

7

Ho lo stesso problema di cui ho trovato un colore nella forma #AAAAAAe voglio convertirlo in una forma che Android possa utilizzare. Ho scoperto che puoi semplicemente usare in 0xFFAAAAAAmodo che Android possa dire automaticamente il colore. Notare che il primo FFè dire alphavalore. Spero che sia d'aiuto


4

La vera risposta è questa più semplice e facile ...

String white = "#ffffff";
int whiteInt = Color.parseColor(white);

3

Stavo affrontando lo stesso problema. In questo modo sono riuscito a risolverlo. Come ha detto CQM, l'utilizzo di Color.parseColor () è una buona soluzione a questo problema.

Ecco il codice che ho usato:

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

In questo caso il mio obiettivo era cambiare il colore del testo del pulsante (Button_C) quando cambio la selezione del colore dalle mie Preferenze (color_prefs).


1

Sulla base di CQM 's risposta e ovokerie-ogbeta ' s risposta a un'altra domanda mi è venuta in mente questa soluzione:

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

1

Ottieni il codice colore delle preferenze condivise in stringa, quindi Converti in intero e aggiungi il colore di sfondo del layout:

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

0

Prova questo, crea drawable nella tua risorsa ...

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

quindi usa ...

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

con colore ... "#FFFFFF"

se il colore è trasparente usa ... setAlpha

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

In bocca al lupo

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.