Как программно изменить основной цвет в Android L
есть ли способ программно изменить основные цвета. Я хотел бы сделать это в коде, в зависимости от экрана/состояние приложения.
В настоящее время я могу установить только цвета в теме (статический):
<item name="android:colorPrimary">@color/primary_color</item>
<item name="android:colorPrimaryDark">@color/dark_color</item>
<item name="android:colorBackground">@android:color/white</item>
<item name="android:colorAccent">@color/primary_color</item>
<item name="android:colorControlHighlight">@color/primary_color</item>
спасибо
2 ответов
вы можете, конечно, реализовать пользовательские подклассы представления, которые имеют методы для установки цветов.
вы также можете определить несколько тем с разными цветовыми схемами.
вид поиск информации о теме из контекста при их создании. Таким образом, чтобы изменить стили, применяемые из темы, вам придется воссоздать иерархию представлений с контекстом, использующим правильную тему.
один из способов сделать это-создать новый ContextThemeWrapper а затем получить LayoutInflator, который использует эту тему обертку, удалить старую версию макета и повторно надуть макет.
грубо:
ContextThemeWrapper themeWrapper = new ContextThemeWrapper(this, R.style.AppThemeWithColorScheme2);
LayoutInflater layoutInflater = LayoutInflater.from(themeWrapper);
viewContainer.removeAllViews();
layoutInflater.inflate(R.layout.my_layout, viewContainer, true );
Если вы используете панель действий, это может быть немного сложнее, потому что панель действий создана один раз за действие.
используйте этот код для настройки toolbarcolor и строки состояния (более темный цвет панели инструментов)
toolbar.setBackgroundColor(toolbarColor);
factor=0.8f;
int a = Color.alpha(toolbarcolor);
int r = Math.round(Color.red(toolbarcolor) * factor);
int g = Math.round(Color.green(toolbarcolor) * factor);
int b = Math.round(Color.blue(toolbarcolor) * factor);
int statusColor=Color.argb(a,
Math.min(r, 255),
Math.min(g, 255),
Math.min(b, 255));
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = MainActivity.this.getWindow();
window.setStatusBarColor(statusColor);
}