DEV Community

Konrad Chmielecki
Konrad Chmielecki

Posted on

[android] themes.xml

Chciałem zmienić kolor nazwy programu znajdujący się w nagłówku komponentu Activity.
Nie chciałem tego robić przy pomocy kodu. Jednak z ciekawości znalazłem funkcje odpowiedzialną za to.

val actionBar = supportActionBar
actionBar?.setTitle(Html.fromHtml("<font color='#145A14'>text</font>"))
Enter fullscreen mode Exit fullscreen mode

Jednak byłem rozczarowany tym że z pewnych powodów nie mogłem tego zrobić przy pomocy themes.xml
Do tego celu służy tag

<item name="android:textColorPrimary">@color/jakiś_kolor</item>
Enter fullscreen mode Exit fullscreen mode

Jednak nie chciał działać. Doszedłem do tego że winowajcą jest nieodpowiednio dobrana klasa z którego się dziedziczy wygląd całej aplikacji i jej komponentów.
Przeglądając zależności klas natknąłem się na ogromne drzewa zależności.
Udało mi się dobrać odpowiednią klasę Theme.MaterialComponents.Light.
Standardowo android studio ustawia Theme.MaterialComponents.DayNight.DarkActionBar.
Nie wiem dokładnie dlaczego pewne atrybuty są ignorowane. Zważywszy na to że z klas których dziedziczą posiadają te atrybuty.
Ale jeżeli są w głównej klasie z której dziedziczy to spokojnie w themes.xml można zmienić każdy z tych atrybutów.

I tak zdefiniowałem komponent Chip a dokładni Chip.Action.
Zmieniając jego kolor, kolor ramki i to jaka jej jest grubość.
Również ustawiłem wyśrodkowany tekst.

<style name="Chip.Action" parent="Widget.MaterialComponents.Chip.Action">
    <item name="chipBackgroundColor">@color/sakura_pink</item>
    <item name="chipStrokeColor">@color/sakura_pink_dark</item>
    <item name="chipStrokeWidth">1dp</item>
    <item name="android:textAlignment">center</item>
</style>
Enter fullscreen mode Exit fullscreen mode

Bez wątpienia jest to wygodne rozwiązanie niż używanie kodu czy ręczne ustawianie atrybutów dla każdego komponentu z osobna.

Przydatną rzeczą jest też to że nie trzeba kompilować i uruchamiać programu za każdym razem aby zobaczyć jak wyglądają komponenty po zmianie ustawień. W Design zmiany są aktualizowane na bieżąco.

Discussion (0)