News Layout 응용 프로그램에서는 우선 로컬 XML 파일에서 기사 텍스트를 읽습니다. 그런 다음 헤드라인, 소제목 및 주요 텍스트의 서식 정보를 제공하는 외부 CSS 파일을 읽습니다.
CSS 파일은 기사의 표준 단락 스타일, 헤드라인의 h1 스타일, 소제목의 h2 스타일 등 세 가지 스타일을 정의합니다.
p {
font-family: Georgia, "Times New Roman", Times, _serif;
font-size: 12;
leading: 2;
text-align: justify;
indent: 24;
}
h1 {
font-family: Verdana, Arial, Helvetica, _sans;
font-size: 20;
font-weight: bold;
color: #000099;
text-align: left;
}
h2 {
font-family: Verdana, Arial, Helvetica, _sans;
font-size: 16;
font-weight: normal;
text-align: left;
}
외부 CSS 파일을 읽는 데 사용되는 기술은
외부 CSS 파일 로드
에서 설명한 기술과 동일합니다. CSS 파일이 로드되면 응용 프로그램에서 아래와 같이
onCSSFileLoaded()
메서드를 실행합니다.
public function onCSSFileLoaded(event:Event):void
{
this.sheet = new StyleSheet();
this.sheet.parseCSS(loader.data);
h1Format = getTextStyle("h1", this.sheet);
if (h1Format == null)
{
h1Format = getDefaultHeadFormat();
}
h2Format = getTextStyle("h2", this.sheet);
if (h2Format == null)
{
h2Format = getDefaultHeadFormat();
h2Format.size = 16;
}
pFormat = getTextStyle("p", this.sheet);
if (pFormat == null)
{
pFormat = getDefaultTextFormat();
pFormat.size = 12;
}
displayText();
}
onCSSFileLoaded()
메서드는 StyleSheet 객체를 만들고 이 객체를 통해 입력 CSS 데이터를 파싱합니다. 기사의 주요 텍스트는 MultiColumnTextField 객체에 표시되며 이 객체는 StyleSheet 객체를 직접 사용할 수 있습니다. 그러나 헤드라인 필드에서는 서식 지정에 TextFormat 객체를 사용하는 HeadlineTextField 클래스를 사용합니다.
onCSSFileLoaded()
메서드는
getTextStyle()
메서드를 두 번 호출하여 두 HeadlineTextField 객체에 각각 사용할 수 있도록 CSS 스타일 선언을 TextFormat 객체로 변환합니다.
public function getTextStyle(styleName:String, ss:StyleSheet):TextFormat
{
var format:TextFormat = null;
var style:Object = ss.getStyle(styleName);
if (style != null)
{
var colorStr:String = style.color;
if (colorStr != null && colorStr.indexOf("#") == 0)
{
style.color = colorStr.substr(1);
}
format = new TextFormat(style.fontFamily,
style.fontSize,
style.color,
(style.fontWeight == "bold"),
(style.fontStyle == "italic"),
(style.textDecoration == "underline"),
style.url,
style.target,
style.textAlign,
style.marginLeft,
style.marginRight,
style.indent,
style.leading);
if (style.hasOwnProperty("letterSpacing"))
{
format.letterSpacing = style.letterSpacing;
}
}
return format;
}
속성 이름과 속성 값의 의미는 CSS 스타일 선언과 TextFormat 객체 간에 서로 다릅니다.
getTextStyle()
메서드는 CSS 속성 값을 TextFormat 객체에서 기대하는 값으로 변환합니다.