Czytałem komentarze na temat aplikacji kontaktów i tego, jak używa ona motywu dla każdego kontaktu.
Prawdopodobnie aplikacja do kontaktów ma pewne predefiniowane motywy (dla każdego koloru podstawowego z tego materiału: http://www.google.com/design/spec/style/color.html ).
Motyw można zastosować przed metodą setContentView w metodzie onCreate.
Następnie aplikacja do kontaktów może losowo zastosować motyw dla każdego użytkownika.
Ta metoda to:
setTheme(R.style.MyRandomTheme);
Ale ta metoda ma problem, na przykład może zmienić kolor paska narzędzi, kolor efektu przewijania, kolor tętnienia itp., Ale nie może zmienić koloru paska stanu i koloru paska nawigacji (jeśli chcesz go również zmienić).
Następnie, aby rozwiązać ten problem, możesz użyć metody przed i:
if (Build.VERSION.SDK_INT >= 21) {
getWindow().setNavigationBarColor(getResources().getColor(R.color.md_red_500));
getWindow().setStatusBarColor(getResources().getColor(R.color.md_red_700));
}
Te dwie metody zmieniają kolor paska nawigacji i stanu. Pamiętaj, że jeśli ustawisz pasek nawigacji jako półprzezroczysty, nie możesz zmienić jego koloru.
To powinien być ostateczny kod:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTheme(R.style.MyRandomTheme);
if (Build.VERSION.SDK_INT >= 21) {
getWindow().setNavigationBarColor(getResources().getColor(R.color.myrandomcolor1));
getWindow().setStatusBarColor(getResources().getColor(R.color.myrandomcolor2));
}
setContentView(R.layout.activity_main);
}
Możesz użyć przełącznika i wygenerować losową liczbę, aby użyć losowych motywów lub, tak jak w aplikacji kontaktów, każdy kontakt prawdopodobnie ma przypisany wstępnie zdefiniowany numer.
Próbka motywu:
<style name="MyRandomTheme" parent="Theme.AppCompat.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/myrandomcolor1</item>
<item name="colorPrimaryDark">@color/myrandomcolor2</item>
<item name="android:navigationBarColor">@color/myrandomcolor1</item>
</style>
Przepraszam za mój angielski.