2015-09-26 8 views
19

Istnieje wiele dokumentów i samouczków dotyczących tworzenia lub dostosowywania stylu motywu systemu Android za pośrednictwem języka XML, ale nie udało się znaleźć sposobu na utworzenie go w kodzie. Wszelkich pomysłów, jak stworzyć styl w kodzie zamiast xml?Jak programowo utworzyć styl motywu systemu Android?

Jest to przykład XML, należy utworzyć ten programowo w kodzie:

<resources> 
    <style name="AppTheme" parent="android:Theme.Material"> 
    <item name="android:colorPrimary">@color/primary</item> 
    <item name="android:colorPrimaryDark">@color/primary_dark</item> 
    <item name="android:colorAccent">@color/accent</item> 
    </style> 
</resources> 
+0

Każdy powód, dla którego chcesz, aby zostało to zrobione programowo? Jeśli chcesz dynamicznie zmieniać styl w czasie wykonywania, możesz sprawdzić ten link http://stackoverflow.com/questions/3241729/android-dynamically-change-style-at-runtime. A jeśli chcesz po prostu pobrać atrybut stylu w kodzie - sprawdź to: http://stackoverflow.com/questions/13719103/how-to-retrieve-style-attributes-programically-z -styles-xml – random

+0

@random bez konkretnego powodu , zmęczony xml, więc po prostu baw się, aby sprawdzić, czy możliwe jest stworzenie motywu na bieżąco – Mercury

+4

@random Mam powód. Muszę nadać kolor dynamicznie, obecnie kolory nie są ustalane. Piszę więc temat jak wyżej w xml, ale chcę dynamicznie nadać kolor tylko na pierwszym ekranie. Tak, że po tym zostanie zastosowany na wszystkich ekranach. –

Odpowiedz

2

Krótka odpowiedź: Jego niemożliwe jak programowo stworzyć motyw & Ustaw jako motyw aplikacji (nawet jeśli osiągnięte w celu utworzenia obiektu Theme) bez identyfikatora zasobu kompozycji.

Szczegóły:

kiedy zadzwonić setTheme funkcja ineffect sposobu ContextWrapper, który na końcu nazywa AssetManager ze wskaźnikiem id zasobów, AssetManager klasa posiadane metodę stosowania motywu aplikacji, który jest JNI wezwanie

Jak wyżej, możemy przekazać identyfikator zasobu tylko w celu zastosowania stylu. Możliwymi opcjami są jednak stałe funkcje klasy

  1. , która jest ograniczona do Window. Możemy użyć setFeatureDrawable & fabularnych stałe ustawić kilka kanału alfa podobnego, FEATURE_ACTION_BAR, FEATURE_CONTEXT_MENU etc ..
  2. Korzystanie setTheme funkcji od aktywności, możemy ustawić motyw z stylu zasobu, który rozwiąże ten problem, o którym mowa w komentarzach przez AjaySharma & Nathan
Powiązane problemy