Otrzymuję wartości koloru szesnastkowego z serwera (w tej formie #xxxxxx
, na przykład #000000
dla czarnego)
Jak przekonwertować to na wartość całkowitą?
Próbowałem Integer.valueOf("0x" + passedColor.substring(1, passedColor.length()))
uzyskać jeszcze bardziej hextastyczny 0x000000
wynik, ale nie jest to interpretowane jako int
tutaj, jakieś inne sugestie?
Otrzymuję błąd: 08-03 21:06:24.673: ERROR/AndroidRuntime(20231): java.lang.NumberFormatException: unable to parse '0x00C8FBFE' as integer
Używam Android SDK do ich setBackgroundColor(int color)
funkcji, który przyjmuje - jak można się domyślić - całkowitą wartość koloru.
To jest PRZECIWIEŃSTWO tego pytania: Jak przekonwertować liczbę całkowitą koloru na ciąg szesnastkowy w systemie Android?
valueOf
metody dwuargumentowej , w której podajesz ciąg wejściowy (oczywiście bez #) i podstawę, która określa podstawę.Integer.valueOf(passedColor.substring(1, passedColor.length()), 16)
Można to zrobić z dowolną liczbą całkowitą! download.oracle.com/javase/6/docs/api/java/lang/… , int)Odpowiedzi:
Prawdziwą odpowiedzią jest użycie:
Color.parseColor(myPassedColor)
w Androidzie,myPassedColor
będąchex
wartością taką jak#000
lub#000000
lub#00000000
.Jednak ta funkcja nie obsługuje skróconych wartości szesnastkowych, takich jak
#000
.źródło
#000
. Zobacz dokumentację#ccc
. Czy jest inny sposób?Odpowiedź jest naprawdę prosta, w Androidzie, jeśli chcesz przekonwertować kolor szesnastkowy na int, po prostu użyj klasy Android Color , przykład pokazany poniżej
to jest dla jasnoszarego koloru
Color.parseColor("#a8a8a8");
To wszystko, a otrzymasz wynik.
źródło
Integer.parseInt(myString.replaceFirst("#", ""), 16)
źródło
parseInt
zakończy się niepowodzeniem, jeśli znajdzie go na wejściu.parseColor()
. Masz bardzo rację.Mam ten sam problem, w którym znalazłem jakiś kolor w postaci
#AAAAAA
i chcę przekształcić to w formę, z której mógłby skorzystać Android. Odkryłem, że możesz po prostu użyć0xFFAAAAAA
, aby Android mógł automatycznie rozpoznać kolor. Zwróć uwagę, że pierwszaFF
mówialpha
wartość. Mam nadzieję, że to pomożeźródło
Prawdziwa odpowiedź brzmi: najprostsza i najłatwiejsza ....
String white = "#ffffff"; int whiteInt = Color.parseColor(white);
źródło
Miałem ten sam problem. W ten sposób udało mi się to rozwiązać. Jak powiedział CQM, użycie Color.parseColor () jest dobrym rozwiązaniem tego problemu.
Oto kod, którego użyłem:
this.Button_C.setTextColor(Color.parseColor(prefs.getString("color_prefs", String.valueOf(R.color.green))));
W tym przypadku moim celem była zmiana koloru tekstu przycisku (Button_C), gdy zmieniam wybór koloru z moich Preferencji (color_prefs).
źródło
Na podstawie macierzy w „s odpowiedź i na ovokerie-ogbeta ” s odpowiedzi na inne pytanie mam wymyślić tego rozwiązania:
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);
źródło
Uzyskaj kod koloru preferencji wspólnych w ciągu znaków, a następnie przekonwertuj na liczbę całkowitą i dodaj kolor tła układu:
sharedPreferences = getSharedPreferences(mypref, Context.MODE_PRIVATE); String sw=sharedPreferences.getString(name, ""); relativeLayout.setBackgroundColor(Color.parseColor(sw));
źródło
Spróbuj tego, stwórz do rysowania w swoim zasobie ...
<shape xmlns:android="http://schemas.android.com/apk/res/android" > <solid android:color="@color/white"/> <size android:height="20dp" android:width="20dp"/> </shape>
następnie użyj ...
z kolorem ... "#FFFFFF"
jeśli kolor jest przezroczysty, użyj ... setAlpha
mView1.setAlpha(x);
z x float 0-1 Ej (0.9f)Powodzenia
źródło