Я читав коментарі щодо програми контактів і як вона використовує тему для кожного контакту.
Можливо, у програми контактів є деякі заздалегідь задані теми (для кожного основного кольору тут: http://www.google.com/design/spec/style/color.html ).
Ви можете застосувати тему перед методом setContentView всередині методу onCreate.
Тоді програма контактів може застосувати тему випадковим чином до кожного користувача.
Цей метод:
setTheme(R.style.MyRandomTheme);
Але у цього методу є проблема, наприклад, він може змінити колір панелі інструментів, колір ефекту прокрутки, колір пульсацій тощо, але він не може змінити колір рядка стану та колір панелі навігації (якщо ви теж хочете змінити його).
Потім для вирішення цієї проблеми ви можете використовувати метод до і:
if (Build.VERSION.SDK_INT >= 21) {
getWindow().setNavigationBarColor(getResources().getColor(R.color.md_red_500));
getWindow().setStatusBarColor(getResources().getColor(R.color.md_red_700));
}
Цей два способи змінюють колір навігації та рядка стану. Пам’ятайте, якщо встановити панель навігації напівпрозорою, ви не можете змінити її колір.
Це повинен бути остаточний код:
@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);
}
Ви можете використовувати комутатор і генерувати випадкові числа для використання випадкових тем або, як, наприклад, у програмі контактів, кожен контакт, ймовірно, має попередньо визначене число.
Зразок теми:
<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>
Вибачте за мою англійську.