Archive for the ‘quick tips’ Category
Tuesday, October 4th, 2011
Как сделать приложение с кастомным хромом можно найти за 5 минут.
Речь пойдет о том как к нему добавить тень.
Проблема: Добавить к аир приложению тень.
Read the rest of this entry »
Posted in AIR, Flash Builder 4, Flex, quick tips | Comments Off on AIR. Полезные советы. Custom chome, тень и html
Monday, October 3rd, 2011
Всем привет.
В ходе последнего проекта накопилось некоторое количество интересностей, проблем и их решений. Я постараюсь рассказать о них в цикле статей.
Проблема 1: Генерим html строку, устанавливаем ее как HTML.htmlText, не отображаются картинки и swf-файлы.
Решение: Нужно разрешить добавлять контент из html строки в “песочницу” приложения
HTML.htmlLoader.placeLoadStringContentInApplicationSandbox = true; |
HTML.htmlLoader.placeLoadStringContentInApplicationSandbox = true;
Проблема 2: Есть HTML компонент. Нужно отделить контент, от скролла. Хочется чтобы скроллы были spark.
Решение:
HTML – это mx компонент. Гибкость работы со скроллами нам дают spark компоненты. Поэтому нужно преврать mx:HTML в компонент поддерживающий spark скроллы. Минимальным требованием является реализация spark.core.IViewport интерфейса. Приблизительный код компонента:
package com.the33cows.spark
{
import flash.events.Event;
import mx.controls.HTML;
import spark.core.IViewport;
public class SparkHTML extends HTML implements IViewport
{
public function SparkHTML()
{
super();
//прячем родные скроллы
verticalScrollPolicy = "off";
horizontalScrollPolicy = "off";
clipAndEnableScrolling = true;
}
private var _verticalScrollPosition:Number;
private var _clipAndEnableScrolling:Boolean;
private var _horizontalScrollPolicy:Number;
[Bindable]
public override function get contentHeight():Number
{
return super.contentHeight ;
}
[Bindable]
public override function get contentWidth():Number
{
return super.contentWidth;
}
[Bindable]
public override function get horizontalScrollPosition():Number
{
return super.horizontalScrollPosition;
}
public override function set horizontalScrollPosition(value:Number):void
{
_horizontalScrollPolicy = value;
super.horizontalScrollPosition = value;
}
[Bindable]
public override function get verticalScrollPosition():Number
{
return super.verticalScrollPosition;
}
public override function set verticalScrollPosition(value:Number):void
{
_verticalScrollPosition = value;
super.verticalScrollPosition = value;
}
public function getHorizontalScrollPositionDelta(navigationUnit:uint):Number
{
return 0;
}
public function getVerticalScrollPositionDelta(navigationUnit:uint):Number
{
return 0;
}
[Bindable]
public function get clipAndEnableScrolling():Boolean
{
return _clipAndEnableScrolling;
}
public function set clipAndEnableScrolling(value:Boolean):void
{
_clipAndEnableScrolling = value;
}
override protected function createChildren():void
{
super.createChildren();
if (htmlLoader)
{
//решаем проблему 1 на глобальном уровне.
//Нужно быть внимательным если контент генерится "на стороне"
htmlLoader.placeLoadStringContentInApplicationSandbox = true;
//слушаем изменение размеров внутренностей html
htmlLoader.addEventListener(Event.HTML_BOUNDS_CHANGE, onHtmlBoundsChange, false, -100);
}
}
private function onHtmlBoundsChange(event:Event):void
{
dispatchPropertyChangeEvent("contentHeight", contentHeight, contentHeight);
dispatchPropertyChangeEvent("contentWidth", contentWidth, contentWidth);
}
}
} |
package com.the33cows.spark
{
import flash.events.Event;
import mx.controls.HTML;
import spark.core.IViewport;
public class SparkHTML extends HTML implements IViewport
{
public function SparkHTML()
{
super();
//прячем родные скроллы
verticalScrollPolicy = "off";
horizontalScrollPolicy = "off";
clipAndEnableScrolling = true;
}
private var _verticalScrollPosition:Number;
private var _clipAndEnableScrolling:Boolean;
private var _horizontalScrollPolicy:Number;
[Bindable]
public override function get contentHeight():Number
{
return super.contentHeight ;
}
[Bindable]
public override function get contentWidth():Number
{
return super.contentWidth;
}
[Bindable]
public override function get horizontalScrollPosition():Number
{
return super.horizontalScrollPosition;
}
public override function set horizontalScrollPosition(value:Number):void
{
_horizontalScrollPolicy = value;
super.horizontalScrollPosition = value;
}
[Bindable]
public override function get verticalScrollPosition():Number
{
return super.verticalScrollPosition;
}
public override function set verticalScrollPosition(value:Number):void
{
_verticalScrollPosition = value;
super.verticalScrollPosition = value;
}
public function getHorizontalScrollPositionDelta(navigationUnit:uint):Number
{
return 0;
}
public function getVerticalScrollPositionDelta(navigationUnit:uint):Number
{
return 0;
}
[Bindable]
public function get clipAndEnableScrolling():Boolean
{
return _clipAndEnableScrolling;
}
public function set clipAndEnableScrolling(value:Boolean):void
{
_clipAndEnableScrolling = value;
}
override protected function createChildren():void
{
super.createChildren();
if (htmlLoader)
{
//решаем проблему 1 на глобальном уровне.
//Нужно быть внимательным если контент генерится "на стороне"
htmlLoader.placeLoadStringContentInApplicationSandbox = true;
//слушаем изменение размеров внутренностей html
htmlLoader.addEventListener(Event.HTML_BOUNDS_CHANGE, onHtmlBoundsChange, false, -100);
}
}
private function onHtmlBoundsChange(event:Event):void
{
dispatchPropertyChangeEvent("contentHeight", contentHeight, contentHeight);
dispatchPropertyChangeEvent("contentWidth", contentWidth, contentWidth);
}
}
}
использование
<s:HGroup>
<sprak:SparkHTML id="contentHtml" width="650" height="100%" />
<!-- отделили скролл -->
<s:HGroup height="100%" width="100" gap="0" horizontalAlign="right" paddingRight="1" />
<!-- указали наш компонент как вью порт -->
<s:VScrollBar id="scrollPage" height="100%" viewport="{contentHtml}"/>
</s:HGroup> |
<s:HGroup>
<sprak:SparkHTML id="contentHtml" width="650" height="100%" />
<!-- отделили скролл -->
<s:HGroup height="100%" width="100" gap="0" horizontalAlign="right" paddingRight="1" />
<!-- указали наш компонент как вью порт -->
<s:VScrollBar id="scrollPage" height="100%" viewport="{contentHtml}"/>
</s:HGroup>
Данный код на 100% решил мои задачи. Если нужно больше – дерзайте.
На сегодня пока все :). Ждите продолжения
Posted in AIR, Flash Builder 4, quick tips | 1 Comment »
Tuesday, September 27th, 2011
Вылетел у меня эклипс и вместе с ним погиб воркспейс. После запуска эклипса, он грузился до определенного момента и вис намертво. Первый раз я просто пересоздал вокрспейс и импортнул проекты по-новой (сделать такое мне посоветовали несколько человек). Но вместе с воркспейсом погибли все мои настройки и это было грустно.
Через какое-то время эклипс повторил свой трюк. И я таки решил найти другое решение, сначала пытался использовать различные варианты запуска эклипса из командной строки, но ничего не вышло.
Поиск дал следующее решение.
Перескажу рецепт:
идем в папочку воркспейса и убиваем файл .metadata/.plugins/org.eclipse.core.resources/.snap
и все отлично запускается. Справедливо как для мак ос, так и для виндовс.
Posted in Eclipse, quick tips | 3 Comments »