在我的strings.xml里边有一些固定的字符串,比如:

<resources>
    <string name="somestring">
        <B>Title</B><BR/>
        Content
    </string>
</resources>

在我的布局中,我有一个TextView,我想用html格式的字符串填充它.

<TextView android:id="@+id/formattedtext"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/htmlstring"/>

如果我这样做,formattedtext的内容就是somestring的内容,没有任何html标记,因此没有格式化.

我知道可以用编程的方式设置格式化文本

.setText(Html.fromHtml(somestring));

因为我在程序的其他部分使用了它,在那里它按预期工作.

要调用这个函数,我需要一个Activity,但目前我的布局只是一个简单的、或多或少是纯XML格式的静态视图,我更愿意保持这种方式,以避免创建一个Activity只是为了设置一些文本的开销.

我是否忽略了一些显而易见的事情?这根本不可能吗?欢迎任何帮助或解决方法!

编辑:刚刚try 了一些东西,似乎xml中的HTML格式有一些限制:

  • 标签必须用小写字母书写

  • 提到here的一些标签不起作用,例如<br/>(可以改用\n)

推荐答案

为了防止有人发现这个,有一个更好的替代方案没有被记录下来(我在搜索了几个小时后被它绊倒了,最后在Android SDK本身的错误列表中找到了它).在字符串中包含原始HTML.xml,只要用

<![CDATA[ ...raw html... ]]>

边缘情况:

  • Characters like apostrophe ('), double-quote ("), and ampersand (&) only need to be escaped if you want them to appear in the rendered text AS themselves, but they COULD be plausibly interpreted as HTML.
    • '"可以表示为\'\",或者&apos;&quot;.
    • <> always需要转义为&lt;&gt;,如果您真的希望它们呈现为'<;'和">;"在文本中.
    • 符号(&;)有点复杂.

示例:

<string name="nice_html">
<![CDATA[
<p>This is a html-formatted \"string\" with <b>bold</b> and <i>italic</i> text</p>
<p>This is another paragraph from the same \'string\'.</p>
<p>To be clear, 0 &lt; 1, & 10 &gt; 1<p>
]]>
</string>

然后,在您的代码中:

TextView foo = (TextView)findViewById(R.id.foo);
foo.setText(Html.fromHtml(getString(R.string.nice_html), FROM_HTML_MODE_LEGACY));

IMHO,这比使用它好几个数量级:-)


August 2021 update:我最初的答案使用的是Html.fromHtml(String),这在API 24中已被弃用.建议使用替代的fromHtml(String,int)格式作为替代.

从_HTML _MODE _LEGACY可能会起作用...但对于你想做的事情,其他标志之一可能是更好的 Select .

最后一点,如果你更喜欢使用Markdown语法而不是HTML来呈现适合在文本视图中使用的Android跨平台文本,那么现在有多个第三方库,包括https://noties.io/Markwon个.

Html相关问答推荐

迪夫导航栏的一些组件显示在导航栏之外,有人能帮助我解决这个问题吗?

你能让Cypress测试为p—fileUpload做文件上传吗?

试图让三个Divs与下面的另外三个对齐

如何在angular 17.2中使用routerLink解决此错误

连续的相同 colored颜色 单元格应位于同一列、网格框中

窗口视图之外的下拉菜单位置

如何使用html的<;输入>;处理/绑定Angular 信号?

需要帮助创建一个简单的html css网格布局

Div中的图像问题-(TailWind CSS中的网格)

如何用等宽字体固定数字在有序列表中的位置

子元素的单一背景

如何在css中在span中绘制圆弧?

网格布局中的组件

在屏幕上每行 css 中的特定列居中

如果使用复选框属性更改,如何防止事件更改?

如何居中此按钮,即使它已经在计算机分辨率中居中

即使必填字段为空,HTML 表单也已成功提交

使用 css 将内容居中并向左对齐?

将 div 放在图片旁边而不是下方

让 Iframe 覆盖整个页面