Добавление TLF очень сильно увеличивает размер файла SWF
У меня есть одно текстовое поле, которое должно поддерживать языки RTL, но это невозможно сделать с обычным TextField, поэтому я использовал TLF. Я создал тестовый проект только для того, чтобы сделать тест с этим небольшим текстовым полем, использующим TLF, и предположить, что он стал 346 КБ. Я просмотрел скомпилированный SWF-файл во flash-разработке и вижу множество классов из TLF-фреймворка, которые я не импортировал в текстовый проект.
Как удалить их из надстройки в основной файл SWF?
Вот мой код
msg = "<TextFlow xmlns='http://ns.adobe.com/textLayout/2008'><p><span>Enter text here ...</span></p></TextFlow>";
textFlow = TextConverter.importToFlow(msg , TextConverter.TEXT_LAYOUT_FORMAT);
textFlow.fontSize = 12;
textFlow.flowComposer.addController(new ContainerController(this, 200, 50));
textFlow.flowComposer.updateAllControllers();
undoManager = new UndoManager();
editManager = new EditManager(undoManager);
textFlow.interactionManager = editManager;
Так что в основном я импортирую эти классы
import flashx.textLayout.compose.StandardFlowComposer;
import flashx.textLayout.container.ContainerController;
import flashx.textLayout.conversion.TextLayoutExporter;
import flashx.textLayout.elements.SpanElement;
import flashx.textLayout.elements.ParagraphElement;
import flashx.textLayout.elements.TextFlow;
import flashx.textLayout.formats.TextLayoutFormat;
import flashx.textLayout.factory.StringTextLineFactory;
import flash.text.engine.TextLine;
import flash.geom.Rectangle;
import flashx.textLayout.edit.EditManager;
import flashx.undo.UndoManager;
import flashx.textLayout.conversion.TextConverter;
2 ответа
Компилятор встраивает только те классы, которые действительно нужны вашему проекту. Классы, которые, по вашему мнению, вам не нужны, вероятно, используются классами инфраструктуры TLF, которые вы импортировали.
Языки RTL действительно сложны в реализации, особенно в сочетании с текстом LTR. Но - всегда есть возможность расширить TextField и создать собственное поле с поддержкой RTL, которое, вероятно, будет значительно меньше по размеру файла. Все зависит от того, сколько времени вы готовы потратить.
У вас есть другой вариант. Если вас больше всего беспокоит размер окончательного SWF-файла, вы можете переключить "Framework Linkage" в области свойств "Flex Build Path" на "Runtime shared library (RSL)". Это позволит вашему SWF-файлу не включать библиотеки времени выполнения. Файл textLayout_2.0.0.232.swz сам по себе составляет 188 КБ. Эта библиотека времени выполнения не будет загружаться клиенту, если он уже есть, и в этом случае загрузка SWF-файла будет единственной загруженной частью и будет намного меньше.
Вы должны попробовать это и посмотреть, каков размер вашего SWF. Убедитесь, что у вас есть файлы RSL, развернутые с вашим SWF, чтобы они могли быть загружены в случае необходимости.