#actionscript-3 #actionscript #flash-builder
#actionscript-3 #actionscript #flash-конструктор
Вопрос:
У меня возникли проблемы с встраиванием шрифта как жирного с использованием FB4. Для этого я использую поля TextLayout и TextLayoutFormat, и мой код выглядит следующим образом:
package
{
import flash.display.Sprite;
import flash.text.AntiAliasType;
import flash.text.Font;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.text.TextFormat;
import flash.text.engine.FontLookup;
import flashx.textLayout.container.ContainerController;
import flashx.textLayout.elements.ParagraphElement;
import flashx.textLayout.elements.SpanElement;
import flashx.textLayout.elements.TextFlow;
import flashx.textLayout.formats.TextLayoutFormat;
public class FontEmbedding extends Sprite
{
[Embed(source='TAHOMA.ttf', fontName='Tahoma', embedAsCFF="true")]
private var _fontTahoma:Class;
private const TAHOMA:String = "Tahoma";
[Embed(source='TAHOMA.ttf', fontWeight = FontWeight.BOLD, fontName='Tahoma Bold', embedAsCFF="true")]
private var _fontTahomBold:Class;
private const TAHOMA_BOLD:String = "Tahoma Bold";
public function FontEmbedding()
{
this.textLayout();
}
private function textLayout():void
{
var textLayoutFormat:TextLayoutFormat = new TextLayoutFormat();
textLayoutFormat.fontLookup = FontLookup.EMBEDDED_CFF;
textLayoutFormat.fontFamily = TAHOMA_BOLD;
textLayoutFormat.fontSize = 32;
var textFlow:TextFlow = new TextFlow();
var paragraphElement:ParagraphElement = new ParagraphElement();
textFlow.addChild(paragraphElement);
var span:SpanElement = new SpanElement();
span.text = "This is an example";
paragraphElement.addChild(span);
textFlow.format = textLayoutFormat;
var containerController:ContainerController = new ContainerController(this, 400, 100);
textFlow.flowComposer.addController(containerController);
textFlow.flowComposer.updateAllControllers();
}
}
}
Шрифт отображается как обычный, а 'fontWeight'
свойство игнорируется. Любые идеи будут с благодарностью приняты?
Комментарии:
1. Разве это не называется FontFamily=»Tahoma» ??
2. Просто предположение, но это имя файла ‘GillSansforJL-Light’ будет указывать на набор символов, которые для меня не выделены жирным шрифтом. Как выглядит ttf в приложении предварительного просмотра?
3. Это может помочь вам в отладке. Он покажет шрифты, которые вы внедрили. var embeddedFonts:Array = Font.enumerateFonts(false); embeddedFonts.sortOn(«FontName», массив. ЧУВСТВИТЕЛЕН К РЕГИСТРУ); трассировка(«Встроенные шрифты:»); for (var i:int = 0; i < Встроенные шрифты. длина; i ) { трассировка(«FontName: » (Встроенные шрифты [i] как шрифт).FontName «, FontStyle: » (Встроенные шрифты [i] как шрифт).FontStyle); }
4. @Hawks это всего лишь пример, но в моем реальном приложении мне нужно будет сделать стандартный шрифт Tahoma жирным шрифтом из папки Windows / Font, разве это невозможно? Шрифты с жирным шрифтом отображаются после реализации кода Треворса, поэтому я не уверен, почему он не отображается как жирный?
Ответ №1:
Этот код работал для меня, со строкой textLayoutFormat.fontWeight = FontWeight.BOLD;
или нет.
package
{
import flash.display.Sprite;
import flash.text.AntiAliasType;
import flash.text.Font;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.text.TextFormat;
import flash.text.engine.FontLookup;
import flash.text.engine.FontWeight;
import flashx.textLayout.container.ContainerController;
import flashx.textLayout.elements.ParagraphElement;
import flashx.textLayout.elements.SpanElement;
import flashx.textLayout.elements.TextFlow;
import flashx.textLayout.formats.TextLayoutFormat;
public class FontEmbedding extends Sprite
{
[Embed(source='ChaparralPro-Bold.otf', fontWeight = FontWeight.BOLD, fontName='ChaparralPro-Bold', embedAsCFF="true")]
private var _fontGillSans:Class;
private const FONT_CHAP:String = "ChaparralPro-Bold";
public function FontEmbedding()
{
this.textLayout();
}
private function textLayout():void
{
var textLayoutFormat:TextLayoutFormat = new TextLayoutFormat();
textLayoutFormat.fontLookup = FontLookup.EMBEDDED_CFF;
textLayoutFormat.fontFamily = FONT_CHAP;
textLayoutFormat.fontSize = 32;
textLayoutFormat.fontWeight = FontWeight.BOLD;
var textFlow:TextFlow = new TextFlow();
var paragraphElement:ParagraphElement = new ParagraphElement();
textFlow.addChild(paragraphElement);
var span:SpanElement = new SpanElement();
span.text = "This is an example";
paragraphElement.addChild(span);
textFlow.format = textLayoutFormat;
var containerController:ContainerController = new ContainerController(this, 400, 100);
textFlow.flowComposer.addController(containerController);
textFlow.flowComposer.updateAllControllers();
}
}
}
Комментарии:
1. можете ли вы пояснить, что добавление ‘FontWeight = FontWeight.BOLD’ придало смелости шрифту? В любом случае это выглядит как жирный шрифт.
2. По моему опыту (я разработал и поддерживаю онлайн-дизайнер, который использует около 100 шрифтов), даже если шрифт выделен жирным шрифтом, вам все равно часто приходится устанавливать для него жирный шрифт, чтобы он отображался правильно. Я создал набор скриптов для преобразования файлов шрифтов в классы, а затем скомпилировал их здесь blog.alastairdawson.com/2009/06/30 /…
3. Спасибо за ваши комментарии, мне нужно было изменить ‘Tahoma.tff’ на ‘TahomaBD.tff’. Этот шрифт не отображается в папке Windows fonts.
Ответ №2:
Определенно существует проблема с применением шрифта, набранного жирным шрифтом.
Шрифт не будет выделен жирным шрифтом в следующем коде, если вы динамически обновите текст позже где-нибудь в коде.
var myTextFormat:TextFormat = new TextFormat();
myTextFormat.font = "Arial";
myTextFormat.bold = true;
myTextField.setTextFormat(myTextFormat);
//
myTextField.text = "some dynamic text";
Вместо этого вам нужно применять текстовый формат каждый раз, когда вы обновляете текст.
var myTextFormat:TextFormat = new TextFormat();
myTextFormat.font = "Arial";
myTextFormat.bold = true;
//
myTextField.text = "some dynamic text";
myTextField.setTextFormat(myTextFormat);
Но обычно я устанавливаю его в качестве шрифта по умолчанию, как показано ниже,
var myTextFormat:TextFormat = new TextFormat();
myTextFormat.font = "Arial";
myTextFormat.bold = true;
myTextField.defaultTextFormat = myTextFormat;
//
myTextField.text = "some dynamic text";
Не идеальный способ для надежного проекта, но он работает.
Сообщите об этой проблеме на, bugs.adobe.com
Ответ №3:
var myFormat:TextFormat = new TextFormat();
myFormat.color = 0x000000;
myFormat.font = "Arial Bold";
myFormat.bold = true;
txt.defaultTextFormat = myFormat;
Комментарии:
1. Пожалуйста, отредактируйте свой ответ, объяснив, почему это хорошее решение.