Chciałbym użyć koloru z łańcucha szesnastkowego, takiego jak "#FFFF0000"
(powiedzmy) zmiana koloru tła układu.
Color.HSVToColor
wygląda jak zwycięzca, ale wymaga float[]
parametru.
Czy w ogóle jestem blisko rozwiązania?
Chciałbym użyć koloru z łańcucha szesnastkowego, takiego jak "#FFFF0000"
(powiedzmy) zmiana koloru tła układu.
Color.HSVToColor
wygląda jak zwycięzca, ale wymaga float[]
parametru.
Czy w ogóle jestem blisko rozwiązania?
Odpowiedzi:
Wypróbuj Color
metodę klasową:
public static int parseColor (String colorString)
Obsługiwane formaty to: #RRGGBB #AARRGGBB „czerwony”, „niebieski”, „zielony”, „czarny”, „biały”, „szary”, „błękitny”, „magenta”, „żółty”, „jasnoszary”, „ciemnoszary” „
#000
wartości?
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ę
if(colorString.length() == 4 && colorString[0] == '#')
Próbować:
myLayout.setBackgroundColor(Color.parseColor("#636161"));
To pytanie pojawia się w przypadku wielu wyszukiwań związanych z kolorem szesnastkowym, dlatego dodam tutaj streszczenie.
Kolory heksadecymalne mają postać RRGGBB
lub AARRGGBB
(alfa, czerwony, zielony, niebieski). Z mojego doświadczenia wynika, że korzystając int
bezpośrednio, musisz użyć pełnego AARRGGBB
formularza. Jeśli masz tylko RRGGBB
formularz, po prostu go poprzedź, FF
aby alfa (przezroczystość) była całkowicie nieprzezroczysta. Oto, jak ustawić to w kodzie. Używanie 0x
na początku oznacza, że jest szesnastkowy, a nie bazowy 10.
int myColor = 0xFF3F51B5;
myView.setBackgroundColor(myColor);
Jak zauważyli inni, możesz Color.parseString
tak używać
int myColor = Color.parseColor("#3F51B5");
myView.setBackgroundColor(myColor);
Pamiętaj, że ciąg musi zaczynać się od #
. Zarówno RRGGBB
i AARRGGBB
formaty są obsługiwane.
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);
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
Konwertuj ten ciąg na int
kolor, którego można używać w setBackgroundColor
isetTextColor
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;
#80000000
w 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 #80000000
jest to półprzezroczysty czarny kolor.
Jego
int color = Color.parseColor("colorstring");
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.
W Xamarin Użyj tego
Control.SetBackgroundColor(global::Android.Graphics.Color.ParseColor("#F5F1F1"));
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"/>
Spróbuj zamiast tego użyć 0xFFF000 i przekaż to do metody Color.HSVToColor.