Eu tenho algumas cordas fixas dentro do meu strings.xml
, algo como:
<resources>
<string name="somestring">
<B>Title</B><BR/>
Content
</string>
</resources>
e no meu layout eu tenho um TextView
que eu gostaria de preencher com a string formatada em html.
<TextView android:id="@+id/formattedtext"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/htmlstring"/>
se eu fizer isso, o conteúdo de formattedtext
é apenas o conteúdo de somestring
stripped de quaisquer tags html e, portanto, não formatado.
Eu sei que é possível definir o texto formatado programaticamente com
.setText(Html.fromHtml(somestring));
porque eu uso isso em outras partes do meu programa em que está funcionando conforme o esperado.
Para chamar essa função, preciso de um Activity
, mas, no momento, meu layout é apenas uma visualização mais ou menos estática em XML simples e prefiro deixá-lo assim, para me salvar da sobrecarga de criar um Activity
apenas para definir alguns texto.
Estou negligenciando algo óbvio? Não é possível? Qualquer ajuda ou soluções alternativas são bem-vindas!
Edit: Apenas tentei algumas coisas e parece que a formatação HTML no xml tem algumas restrições:
as tags devem ser escritas em minúsculas
algumas tags mencionadas aqui não funcionam, por exemplo
<br/>
(é possível usar\n
)
fonte
Respostas:
Caso alguém ache isso, existe uma alternativa melhor que não está documentada (eu tropecei nela depois de pesquisar por horas e finalmente a encontrei na lista de erros do próprio Android SDK). Você PODE incluir HTML bruto em strings.xml, contanto que você o envolva
Exemplo:
Então, no seu código:
IMHO, existem várias ordens de magnitude mais agradáveis para trabalhar com :-)
fonte
Html.fromHtml(getString(R.string.nice_html))
? :)Como a resposta principal aqui está sugerindo algo errado (ou pelo menos muito complicado), acho que isso deve ser atualizado, embora a pergunta seja bastante antiga:
Ao usar recursos de String no Android, basta chamar
getString(...)
do código Java ou usarandroid:text="@string/..."
no XML do layout.Mesmo se você quiser usar a marcação HTML em suas Strings, não precisará alterar muito:
Os únicos caracteres que você precisa escapar nos recursos da String são:
"
torna - se\"
'
torna - se\'
&
torna - se&
ou&
Isso significa que você pode adicionar sua marcação HTML sem escapar das tags:
No entanto, para ter certeza, você deve usar apenas
<b>
,<i>
e<u>
como eles estão listados na documentação.Se você deseja usar suas seqüências HTML a partir de XML , continue usando
android:text="@string/..."
, ele funcionará bem.A única diferença é que, se você quiser usar suas seqüências HTML a partir do código Java , precisará usá- las em
getText(...)
vez degetString(...)
agora, pois a primeira mantém o estilo e a segunda apenas o tira.É tão fácil quanto isso. Sem CDATA, não
Html.fromHtml(...)
.Você só vai precisar
Html.fromHtml(...)
se você fez codificar seus caracteres especiais em HTML marcação. Use-o comgetString(...)
então. Isso pode ser necessário se você deseja passar a String paraString.format(...)
.Isso também está descrito nos documentos .
Editar:
Não há diferença entre o
getText(...)
HTML sem escape (como propus) ou asCDATA
seções eHtml.fromHtml(...)
.Veja o gráfico a seguir para uma comparação:
fonte
getResources().getText(R.string.codename)
<b>
,<i>
,<u>
. Outras tags nem sempre são suportadas.Escapa suas tags HTML ...
fonte
TextView
mostrar HTML?fromHTML()
.Html.fromHTML()
você tem que codificar os caracteres especiais. Estranho!O Android não possui uma especificação para indicar o tipo de sequência de recursos (por exemplo, texto / sem formatação ou texto / html). Existe uma solução alternativa, no entanto, que permitirá que o desenvolvedor especifique isso no arquivo XML.
Depois de defini-las, você pode se expressar com HTML em arquivos xml sem precisar chamar setText (Html.fromHtml (...)) novamente. Estou bastante surpreso que essa abordagem não faça parte da API.
Esta solução funciona na medida em que o simulador de estúdio Android exibirá o texto como HTML renderizado.
res / values / strings.xml (o recurso de string como HTML)
layout.xml (apenas as partes relevantes)
Declare o espaço para nome do atributo customizado e inclua o atributo android_ex: isHtml. Também use a subclasse de TextView.
res / values / attrs.xml (defina os atributos customizados para a subclasse)
TextViewEx.java (a subclasse de TextView)
fonte
Última atualização:
Html.fromHtml(string);
// descontinuado após as versões do Android N ..O código a seguir dá suporte ao Android N e versões acima ...
fonte
fonte
Tenho outro caso em que não tenho chance de colocar CDATA no xml ao receber a string HTML de um servidor.
Aqui está o que eu recebo de um servidor:
Parece ser mais complicado, mas a solução é muito mais simples.
Espero que ajude!
Linh
fonte