PDA

Просмотр полной версии : Внешний CSS


Jitakuzu
01.08.2011, 18:55
Доброго времени суток

Мне нужно на FLEX'е использовать внешний CSS. Тяжело объяснить это в трех словах, поэтому буду описывать "на пальцах".
CSS можно подгрузить таким образом
<fx:Style source="SomeCSS.css"/>
Но тогда после каждого внесения изменений в файл SomeCSS нужно будет перекомпилировать приложение.
Чтобы этого избежать, можно подгрузить css с помощью loader'а, пропарсить css и запихнуть его в StyleSheet. Но как тогда присвоить текстовому полю типа UITextField один из стилей, описанных в подгруженном CSS?

CSS выглядит примерно так:
.text_small{
font-family: URWClarendonCyrillicBold;
font-size: 13px;
textAlign: Left;
}

.text_large{
font-family: URWClarendonCyrillicRegular;
font-size: 15px;
textAlign: center;
}

Спасибо за внимание, возможно, и за помощь =))

DaFive
01.08.2011, 19:08
Загрузить внешний css-файл. (http://livedocs.adobe.com/flex/3/html/help.html?content=Working_with_Text_15.html)

GBee
01.08.2011, 19:10
Можно отдельно скомпилить css и грузить его StyleManager.loadStyleDeclarations(url); тогда по идее компоненты сами обновятся.

Jitakuzu
01.08.2011, 19:14
DaFive
Пробовал - не подходит. Гуглом я умею пользоваться ;)
GBee
Спасибо, попробую

Добавлено через 43 минуты
К сожалению, данный вариант не подходит. В таком случае меняем шило на мыло: вместо перекомпиляции основного приложения, нужно будет каждый раз перекомпилировать swf, содержащий css.
В идеале я хочу получить, примерно, следующее:
css содержит три стиля.
Приложение выводит на экран три текстовых поля, текст в которых отображается в одном из трех стилей, подгруженных в css файле.
Меняться настройки стилей должны лишь редактированием файла css. Без перекомпиляции swf приложения.

alatar
01.08.2011, 20:06
DaFive, ссылкой промахнулся. http://help.adobe.com/en_US/flex/using/WS2db454920e96a9e51e63e3d11c0bf69084-7f8c.html
Грузить css-файл особого смысла нет, вы сразу потеряете в функционале. Не получится использовать иконки, скины и прочее, что подразумевает встраивание ресурсов. Поэтому, как рекомендует Adobe (и GBee), грузите скомпилированные стили.

etc
01.08.2011, 23:28
Не получится использовать иконки, скины и прочее, что подразумевает встраивание ресурсов.
Ну вот, а мы такое ещё три года назад сделали.

alatar
01.08.2011, 23:52
Я не говорил, что это невозможно в принципе, но стандартными средствами не получится.

Jitakuzu
03.08.2011, 13:49
да мне не надо грузить иконки и прочее. Нужно только безе перекомпиляции менять шрифт и размер в CSS файле

Apikaster
04.08.2011, 16:56
Ну вот, а мы такое ещё три года назад сделали.

Ну если ВЫ такое еще 3 года назад сделали почему щас парням не помогаешь ?
Или ты на этом форуме просто ответы для себя ищешь ?
По идее надо и с народом делиться знаниями ...
В противном случае нету смысла ... есть ты тут или нет ...!

etc
04.08.2011, 17:35
Ну если ВЫ такое еще 3 года назад сделали почему щас парням не помогаешь ?
Или ты на этом форуме просто ответы для себя ищешь ?
По идее надо и с народом делиться знаниями ...
В противном случае нету смысла ... есть ты тут или нет ...!

Не надо мне такими большими буквами «выкать». То, что мы такой функционал сделали ещё три года назад, к флексу отношения не имеет, он тогда даже скомпилированные стили не умел загружать, не то чтобы в рантайме парсингом заниматься.

Jitakuzu
04.08.2011, 17:52
Да не надо в Рантайме... Просто должна быть возможность перед работой с программой изменить быстро, например, размер шрифта. Потом запустить swf и увидеть произошедшие изменения.
Нужно просто приложение, которое вывод на экран "Hello, World!". Но шрифт, размер, болд, Италик, Центрирование и прочие пареметры нужно задавать без перекомпиляции, изменяя лишь CSS файл в текстовом редакторе.

Apikaster
04.08.2011, 17:56
Я вот все ровно думаю что там разные режимы есть ...

Добавлено через 9 минут
etc ...
если ты такой гуру флекса, то ответь на этот вопрос ...
http://www.flasher.ru/forum/showthread.php?t=162858
Вот тебе пища для мозга ...
Я не могу такого сделать, по скольку не силен во FLEX-е ...
Если есть идеи, то подскажи ...

alatar
04.08.2011, 18:31
Да не надо в Рантайме... Просто должна быть возможность перед работой с программой изменить быстро, например, размер шрифта. Потом запустить swf и увидеть произошедшие изменения
Это и есть "в рантайме".
Либо используйте то, что предлагает Adobe (компилируется только css, основное приложение в перекомпиляции не нуждается), либо используйте сторонние решения (http://www.rubenswieringa.com/blog/cssloader) (не проверял, работает ли оно с новыми SDK).

P.S. Apikaster, будете хамить, никто вам не поможет. И не флудите в чужих темах.

Jitakuzu
04.08.2011, 18:56
я попробовал как описано тут http://livedocs.adobe.com/flex/3/html/help.html?content=Working_with_Text_15.html

CSS выглядит следующим образом:
.display_default{
font-family: CloisterBlack;
font-size: 20px;
}

в коде пишу:
textField.text = "<span class='display_default'>" + someTextVar + "</span>";

Размер шрифта меняется удачно, но шрифт не меняется. В чем может быть дело? Сам шрифт заэмбдил:

[Embed( source='../assets/CloisterBlack.ttf',
fontName='CloisterBlack',
mimeType='application/x-font',
embedAsCFF=false
)]
private var font1:Class;

alatar
04.08.2011, 19:40
я попробовал как описано тут
Это будет работать только с TextField и к флексу не относится.
В чем может быть дело?
Font.registerFont(font1);
textField.embedFonts = true;
...

Jitakuzu
05.08.2011, 12:46
Я использую UITextField, он же наследуется от TextField.
Шрифт все равно не подключается. Проблема в UITextField?

Ошибку идентифицировал:
Если в СSS написать
.display_default{
font-family: Arial;
font-size: 40px;
color: #FF;

}
то есть, указать стандартный шрифт, то все работает. Шрифт меняется.
Не работает в том случае, когда указывается Embed шрифт.
Как с этим бороться? =)

Добавлено через 2 часа 45 минут
Написал аналогичный код в AS3 проекте, использую TextField. Все работает. По идеи проблема в UITextField...