Posted in Programming

Renderizar html numa aplicação Air/Flex

Ok everybody, mês passado estava construindo um app para android que renderizava html.
Ok. Como fazer isto? Será que o fato da aplicação ser em flex facilitaria ou dificultaria?
Depois de muito perrengue, encontrei algumas respostas. Ei –las :

<Mx:HTML />

Funcionava na versão antiga do flex( não tenho certeza, mas acho que até a 4.0). A adobe otimizou a biblioteca spark no flash builder 4.6 e muitas tags mxml foram deletadas, a mx:html foi uma delas. Sem contar que a adobe não recomenda em app para mobiles.

StyleableStageText/ StyleableTextField

Funciona, mas somente como actionscript. Não tem uma tag em mxml para ele. E também tem um trick que é meio que indispensavel. É setar a skin do seu texto para a padrão mobile ( “spark.skins.mobile.TextAreaSkin” para textarea ) .

Tá, vamos explicar do inicio, a Adobe otimizou o codigo de texto também, uma vez que textos tipos TLF foram “descartados”. Os principais componentes que “faziam” a renderização de html em air tem base em TLF, comos os richTexts ( <s:RichText /> e cia ). Então usar este tipo de texto na sua aplicação realmente vai consumir mais memória que o normal.

Só que o StyleableStageText/StyleableTextField renderiza as principais estilizações de texto ( como o bold, italico, sublinhado e a bolinha que fica em frente ao componente <li> do html – •, o restante ele ignora, viu?) e, dependendo do que você quer, ele é uma mão na roda e tem a vantagem de ser otimizado, ou seja, não consome tanta memória quanto os componentes TLF.

HTMLLoader

Eu acabei não usando estes carinha aqui. Não sei como é sua estrutura em mxml e nem sei se é usado fora do actionScript ou não ( what a shame!). Isto porque ele não é para mobile. Ele é somente para aplicações em desktop. Sem contar que consome uma senhora memória para aplicativos mobiles. Postei ele aqui pois para mim pode não ter sido util, mas para outra pessoa, quem sabe?

E finalmente o StageWebView

Este carinha aqui só funciona em actionscript. Não tem uma tag para ele em mxml, pois ele é uma clase do Air. A vantagem é que ele é proprio para mobile e otimizado – não é para consumir muita memoria, mas como renderiza html possa consumir consideravelmente, não chega a ser como o <s:RichText /> mas não é tão leve quanto o StyleableStageText/StyleableTextField.

Na verdade, esta classe tem o webkit por trás, ou seja, você está, nada mais, nada menos, que incorporando o navegador do android na sua aplicação. Então além desta classe ler e renderizar html como um navegador, esta classe abre alguns arquivos que podem ser abertos em navegadores do tipo chrome/safari, como planinhas xls, pdf, docx, doc e etc. Sem contar que ele entende html5 e css3, então as opções são muitas. Mas… lembrando sempre que: a quem muito se pede, muito se dá. Conforme a finalidade que você empregar, ele pode consumir muita memória.

E ele tem uma desvantagem, ele não some quando você muda a view do seu app. Ele é incorporado no stage geral da sua aplicação. So no way do conteudo que você inseriu para esta classe sair da tela quando você sair da pagina. Tem que tirar na mão, meu chapa!

Bem gente, estas foram as soluções que encontrei. Lógico, deve ter outras opções, se alguém souber de mais umas que não coloquei aqui e que sirva para mobile, eu ficaria contente de me enviarem o link pelo twitter ou deixar um comentário J

Thnks

Ps.: Como no meu caso existiam duas views, para se ter noção, uma tinha que renderizar uma tabela com estilo css, e a outra era mais simplezinha só tags simples, então eu usei o StageWebView e o StyleableTextField.

Advertisements