Динамический выбор файла CSS, нажав на кнопку в FLEX 3
Мне нужно создать приложение, в котором мы меняем стиль приложения, которое является темой приложения, на основе нажатия кнопки.
Я скачал тему, которая содержит разные CSS-файлы. Мне нужно динамически объявить CSS для приложения, чтобы применить эту тему.
У меня есть имя файла Theme1.css, Theme2.css, Theme3.css, Theme4.css, Theme5.css.
когда я нажимаю кнопку "Тема 1", мне нужно применить файл Theme1.css в качестве источника стиля. Примерно так же, когда я нажимаю кнопку Theme 2, мне нужно применить файл Theme2.css в качестве источника стиля.
Примечание. CSS-файл содержит стиль как для приложения, так и для компонента приложения.
Хорошего дня....
3 ответа
Вы должны будете использовать средство в eclipse/flex builder для компиляции CSS в SWF, чтобы стили могли быть изменены во время выполнения.
Вы также должны будете поддерживать переменную экземпляра текущего идентификатора темы.
Это то, что вы ищите?
public function switchTheme(theme:int):void {
StyleManager.unloadStyleDeclarations("assets/styles/Theme"+currentTheme+".swf");
StyleManager.loadStyleDeclarations("assets/styles/Theme"+theme+".swf");
this.currentTheme = theme;
}
Затем вы должны назначить обработчики кликов для каждой кнопки функции switchTheme - передавая идентификатор темы в качестве параметра.
Я думаю, что вы должны зациклить все управление один за другим и установить тему на контроль. Например, Если вы установите КРАСНУЮ тему по умолчанию, а кнопка будет красной, тогда вы поменяете тему на Синий, а затем установите цвет кнопки на синий, используя цикл управления. Может быть, это поможет вам....
Пожалуйста, спросите меня, не понимаете ли вы, что я говорю...
Благодарю.
Вам нужно скомпилировать ваши CSS-файлы как SWF. Вы можете щелкнуть правой кнопкой мыши CSS-файлы в окне проводника Flash Builder и выбрать "Компилировать CSS в SWF" из меню.
Затем вы используете loadStyleDeclarations()
метод из StyleManager
загрузить SWF-файл с вашей информацией CSS.
Предыдущий шаг только добавит новые стили в вашу подсистему стилей. Если вы хотите очистить старые стили, вам нужно unloadStyleDeclarations()
Метод первый.
Если вы выгружаете текущие активные объявления CSS, используйте false
как второй параметр, так StyleManager
не делает недействительными стили и перестраивает цепочки / кэш объявлений стилей для компонентов на сцене. Это не только медленно, но и приводит к обновлению экрана со стилями по умолчанию перед применением новых стилей.
Вы можете иметь что-то похожее на это, и позвонить applyTheme('url/to/theme.swf')
с соответствующим URL, когда вы хотите изменить тему:
private var currentThemeURL:String = 'themes/default.swf';
public function applyTheme(themeURL:String):void
{
StyleManager.unloadStyleDeclarations(currentThemeURL, false);
StyleManager.loadStyleDeclarations(themeURL);
currentTheme = themeURL;
}