Html.fromHtml 如何兼容span标签
时间: 2023-12-12 12:05:44 浏览: 130
`Html.fromHtml` 方法在 Android 7.0 (API level 24) 及以上版本中已经被废弃,推荐使用 `HtmlCompat.fromHtml` 方法替代。`HtmlCompat.fromHtml` 方法可以兼容 span 标签,你可以在 HTML 字符串中使用 span 标签来设置字体颜色、字体大小等样式。下面是一个示例:
```kotlin
val htmlString = "<b>Hello</b> <span style=\"color:red;\">world!</span>"
val spanned = HtmlCompat.fromHtml(htmlString, HtmlCompat.FROM_HTML_MODE_LEGACY)
textView.text = spanned
```
在上面的代码片段中,我们定义了一个包含粗体文本和红色字体的 span 的 HTML 字符串,并且使用 `HtmlCompat.fromHtml` 方法将其转换为 `Spanned` 对象,最后将其设置到 `TextView` 中显示。
需要注意的是,`HtmlCompat.fromHtml` 方法的第二个参数 `HtmlCompat.FROM_HTML_MODE_LEGACY` 表示使用最新的 HTML 解析器。如果你需要兼容较早版本的 Android 系统,可以使用 `HtmlCompat.FROM_HTML_MODE_COMPACT` 参数,这个参数可以兼容 Android 4.4 及以上版本。
相关问题
android Html.fromHtml颜色不起作用的原因
可能是因为你在使用 Html.fromHtml() 方法时,没有正确地设置 SpannableString 中的颜色。可以尝试以下方法:
1. 使用 Html.fromHtml() 方法将 HTML 字符串转换为 SpannableString 对象。
2. 在 SpannableString 对象中找到需要设置颜色的部分,使用 ForegroundColorSpan 设置颜色。例如:
```java
SpannableString spannableString = new SpannableString(htmlString);
ForegroundColorSpan colorSpan = new ForegroundColorSpan(Color.RED);
spannableString.setSpan(colorSpan, startIndex, endIndex, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
```
其中,startIndex 和 endIndex 分别表示需要设置颜色的文本的起始和结束位置。
3. 将 SpannableString 对象设置给 TextView 或其他支持 Spannable 的组件。
```java
textView.setText(spannableString);
```
注意:如果你使用的 HTML 中包含了自定义的标签或属性,需要自定义一个解析器来解析它们。可以参考 Android 官方文档中的 Html.fromHtml() 方法的源代码,自定义解析器并使用 Html.fromHtml() 方法的另一种重载方法来解析 HTML。
import requests from bs4 import BeautifulSoup head={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.67" } content = requests.get("https://movie.douban.com/annual/2022?fullscreen=1&source=movie_navigation",headers = head).text soup = BeautifulSoup(content, "html.parser") all_links = soup.findAll('span',attrs={"class": "movie-name-text"}) for link in all_links: all_names = link.findAll('a') for name in all_names: print( name.string)
这段代码是用Python爬取豆瓣电影年度榜单的电影名称。它使用了`requests`库发送HTTP请求,并使用`BeautifulSoup`库对返回的HTML内容进行解析。
首先,我们指定了请求头`User-Agent`,模拟浏览器发送请求。然后,使用`requests.get()`方法发送GET请求,并将返回的内容赋值给变量`content`。
接下来,我们使用`BeautifulSoup`库将HTML内容解析为一个可操作的对象`soup`。
然后,我们使用`soup.findAll()`方法查找所有具有`class`为`movie-name-text`的`span`标签。这些标签包含了电影名称的信息。
接着,我们遍历所有找到的标签,并使用`link.findAll()`方法查找每个标签内部的所有`a`标签。这些标签包含了电影名称的具体文本内容。
最后,我们使用`name.string`获取每个电影名称的文本,并将其打印出来。
请注意,这段代码只是获取了豆瓣电影年度榜单页面中的电影名称,并打印出来。如果你想要进一步处理这些数据,可以根据需要进行相应的操作。
阅读全文