Jak uzyskać kolor z szesnastkowego ciągu kolorów

Odpowiedzi:

592

Wypróbuj Colormetodę klasową:

public static int parseColor (String colorString)

Z dokumentacji Androida :

Obsługiwane formaty to: #RRGGBB #AARRGGBB „czerwony”, „niebieski”, „zielony”, „czarny”, „biały”, „szary”, „błękitny”, „magenta”, „żółty”, „jasnoszary”, „ciemnoszary” „

jethro
źródło
4
Czy ktoś wie, jak parsować #000wartości?
Alex Semeniuk
6
Tak, po prostu zrób: 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) }popraw mnie, jeśli się mylę
xdevs23,
6
Aby dodać do kodu @ xdevs23, zmień warunek if na to:if(colorString.length() == 4 && colorString[0] == '#')
Zac
Twoja odpowiedź byłaby lepsza, gdybyś nie tylko pokazał funkcję, ale także jak z niej korzystać: MyView.setBackgroundColor (Color.parseColor ("# 123456");
Yvonne Marggraf
int red = colorString.charAt (1) == '0'? 0: 255; int niebieski = colorString.charAt (2) == '0'? 0: 255; int zielony = colorString.charAt (3) == '0'? 0: 255; Color.rgb (czerwony, niebieski, zielony);
GTID
253

Próbować:

myLayout.setBackgroundColor(Color.parseColor("#636161"));
invisbo
źródło
4
jeśli używasz Xamarin .. kodem jest ten Android.Graphics.Color.ParseColor („# 636161”) z „P” do Upper
Igor Monteiro
38

To pytanie pojawia się w przypadku wielu wyszukiwań związanych z kolorem szesnastkowym, dlatego dodam tutaj streszczenie.

Kolor od wew

Kolory heksadecymalne mają postać RRGGBBlub AARRGGBB(alfa, czerwony, zielony, niebieski). Z mojego doświadczenia wynika, że ​​korzystając intbezpośrednio, musisz użyć pełnego AARRGGBBformularza. Jeśli masz tylko RRGGBBformularz, po prostu go poprzedź, FFaby alfa (przezroczystość) była całkowicie nieprzezroczysta. Oto, jak ustawić to w kodzie. Używanie 0xna początku oznacza, że ​​jest szesnastkowy, a nie bazowy 10.

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

Kolor ze sznurka

Jak zauważyli inni, możesz Color.parseStringtak używać

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

Pamiętaj, że ciąg musi zaczynać się od #. Zarówno RRGGBBi AARRGGBBformaty są obsługiwane.

Kolor z XML

W miarę możliwości powinieneś pobierać kolory z XML. Jest to zalecana opcja, ponieważ znacznie ułatwia wprowadzanie zmian kolorów w aplikacji. Jeśli ustawisz wiele kolorów heksadecymalnych w całym kodzie, trudno będzie później je zmienić.

Projekt materiału dla Androida ma podniebienie kolorów z już skonfigurowanymi wartościami szesnastkowymi.

Te kolory motywów są używane w całej aplikacji i wyglądają tak:

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>

Jeśli potrzebujesz dodatkowych kolorów, dobrą praktyką jest zdefiniowanie koloru w dwóch krokach w xml. Najpierw nazwij kolor wartości heksadecymalnej, a następnie nazwij komponent aplikacji, który powinien otrzymać określony kolor. Ułatwia to późniejsze dostosowanie kolorów. Ponownie, to jest w colors.xml .

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

Następnie, jeśli chcesz ustawić kolor w kodzie, wykonaj następujące czynności:

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

Predefiniowane kolory Androida

Klasa Color zawiera szereg predefiniowanych stałych kolorów. Możesz użyć tego w ten sposób.

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

Inne kolory to

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

Notatki

Suragch
źródło
22

Konwertuj ten ciąg na intkolor, którego można używać w setBackgroundColorisetTextColor

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

16 oznacza, że ​​jest szesnastkowy, a nie zwykłe 0-9. Wynik powinien być taki sam jak

int color = 0xFFFF0000;
Bryan Field
źródło
jak mogę przekonwertować kolor ciągu = "80000000"; do int kolor =?
Ashish Sahu
Myślę, że wersja łańcuchowa powinna być, #80000000w którym to przypadku będzie wersja int int color = 0x80000000;. Jeśli to nie zadziała, opublikuj nowe pytanie z większą ilością szczegółów, aby więcej osób niż ja to zauważyło. Pamiętaj, że #80000000jest to półprzezroczysty czarny kolor.
Bryan Field
Wiem, że int będzie int kolor = 0x80000000, ale moim problemem jest sposób konwersji ... Ale teraz rozwiążę swój problem z int color = parseColor ("#" + "80000000"); ... dzięki za odpowiedź.
Ashish Sahu
Mam wyjątek przy użyciu kodu: java.lang.NumberFormatException: Niepoprawny int: „FFFF0000”
błąd 1337
16

Jego

int color =  Color.parseColor("colorstring");
Patricia Heimfarth
źródło
15

Spróbuj tego:

vi.setBackgroundColor(Color.parseColor("#FFFF0000"));
MindBrain
źródło
12

Używam tego i działa mi świetnie do ustawiania dowolnego koloru, jaki chcę.

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

Ustaw kolory za pomocą 0-255 dla każdego czerwonego, zielonego i niebieskiego, a następnie w dowolnym miejscu, w którym chcesz użyć tego koloru, po prostu wstaw MY_COLOR zamiast Color.BLUE lub Color.RED lub dowolnego innego statycznego koloru oferowanego przez klasę Color.

Wystarczy wyszukać w Google tabelę kolorów, aby znaleźć tabelę z poprawnymi kodami RGB za pomocą 0-255.

Opy
źródło
7

W Xamarin Użyj tego

Control.SetBackgroundColor(global::Android.Graphics.Color.ParseColor("#F5F1F1"));
Shanmugasundharam
źródło
6

Plik XML zapisany w 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>

Ten kod aplikacji pobiera zasób koloru:

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

Ten układ XML stosuje kolor do atrybutu:

<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textColor="@color/translucent_red"
    android:text="Hello"/>
AZ_
źródło
5

Spróbuj zamiast tego użyć 0xFFF000 i przekaż to do metody Color.HSVToColor.

Dave Long
źródło
2
Spodziewałbym się, że powinieneś zastąpić tę trzecią literę F wartością zero. Myślę, że w OP dwa pierwsze znaki F służą do ustawienia krycia.
Bryan Field,
4

Jeśli zdefiniujesz kolor w pliku XML i chcesz go użyć do zmiany koloru tła lub czegoś innego, ten interfejs API jest tym, którego szukasz:

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

W mojej próbce użyłem go do TestView

M.Hefny
źródło
0

Skrócony kod szesnastkowy

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);
GTID
źródło