Android开发Demo:TextView同时显示图片和文本、同时显示多种颜色

一、预期效果

        1、在一个Android TextView控件之中,同时显示文本和图片,如下图所示,文本之间掺夹着一张或多张图片。

        2、在一个Android TextView控件之中,同时显示多种颜色,如下图所示,一条文本显示了两种不同的颜色。

二、实现方式

        无论是一个TextView同时显示图片和文本,还是同时显示多种颜色,都需要一个Html ImageGetter对象。获得这个对象可以通过下面的代码实现:

private Html.ImageGetter getImageGetter() {return source -> {Drawable drawable = getDrawable(Integer.parseInt(source));drawable.setBounds(0, 0, 60, 60);return drawable;};
}

        其中上面的几个参数我也不懂,默认就不需要改变了吧,除非你调用了然后显示异常,可以再去网上看看怎么才能合理设置。

        1、同时显示图片和文本。思路:将图片资源通过html标签的方式插入到字符串中,然后TextView再通过setText显示这个带有图片的字符串。如下(tv_1是我定义的TextView控件):

// 设置文本和图片
StringBuffer str = new StringBuffer();
str.append("故人西辞黄鹤楼");
str.append("<img src='" + R.mipmap.yellow_crane_tower + "'>");
str.append(",");
str.append("烟花三月下扬州。");// 在文本控件中显示
tv_1.setText(Html.fromHtml(str.toString(), getImageGetter(), null));

        2、同时显示多种颜色,思路:将文本的颜色通过html标签的方式插入到字符串,然后TextView再通过setText显示这个带有不同颜色的字符串。如下(tv_2是我定义的TextView控件):

// 设置文本及其颜色
StringBuffer str = new StringBuffer();
str.append("故人西辞黄鹤楼,");
str.append("<font color='#0000FF'>" + "烟花三月下扬州。" + "</font>");// 在文本控件中显示
tv_2.setText(Html.fromHtml(str.toString(), getImageGetter(), null));

三、实际效果

        可以看到下面的两个TextView控件中,已经实现了图片与文本的同时显示,以及两种不同颜色的同时显示。

 

四、完整代码

        Activity代码:

package com.cs.blackbox;import androidx.appcompat.app.AppCompatActivity;import android.annotation.SuppressLint;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.text.Html;
import android.widget.TextView;public class TextViewFunctionTestActivity extends AppCompatActivity {// 初始化界面@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_text_view_function_test);demo_1();demo_2();}// 同时显示图片和文本private void demo_1() {// 获取文本控件TextView tv_1 = findViewById(R.id.tft_tv_demo_1);// 设置文本和图片StringBuffer str = new StringBuffer();str.append("故人西辞黄鹤楼");str.append("<img src='" + R.mipmap.yellow_crane_tower + "'>");str.append(",");str.append("烟花三月下扬州。");// 在文本控件中显示tv_1.setText(Html.fromHtml(str.toString(), getImageGetter(), null));}// 同时显示多种颜色private void demo_2() {// 获取文本控件TextView tv_2 = findViewById(R.id.tft_tv_demo_2);// 设置文本及其颜色StringBuffer str = new StringBuffer();str.append("故人西辞黄鹤楼,");str.append("<font color='#0000FF'>" + "烟花三月下扬州。" + "</font>");// 在文本控件中显示tv_2.setText(Html.fromHtml(str.toString(), getImageGetter(), null));}// 获取一个Html ImageGetter@SuppressLint("UseCompatLoadingForDrawables")private Html.ImageGetter getImageGetter() {return source -> {Drawable drawable = getDrawable(Integer.parseInt(source));drawable.setBounds(0, 0, 60, 60);return drawable;};}
}

        XML布局代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_marginLeft="8dp"android:layout_marginTop="16dp"android:layout_marginRight="8dp"android:layout_marginBottom="16dp"android:orientation="vertical"tools:context=".TextViewFunctionTestActivity"><TextViewandroid:id="@+id/tft_tv_demo_1"android:layout_width="match_parent"android:layout_height="wrap_content"android:textColor="@color/app_black"android:textSize="24sp" /><TextViewandroid:id="@+id/tft_tv_demo_2"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="24dp"android:textColor="@color/app_black"android:textSize="24sp" />
</LinearLayout>

        yellow_crane_tower图片文件:自己到网上下载一个图片来替换就好。

五、参考资料

        重写ImageGetter,让TextView异步加载包含图片的html内容

        ImageGetter显示Html中的图片

        Html类ImageGetter接口

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/56841.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

常见API架构介绍

常见API架构介绍 两个服务间进行接口调用&#xff0c;通过调用API的形式进行交互&#xff0c;这是常见CS架构实现的模式&#xff0c;客户端通过调用API即可使用服务端提供的服务。相较于SPI这种模式&#xff0c;就是服务端只规定服务接口&#xff0c;但具体实现交由第三方或者自…

AcWing 898. 数字三角形 (每日一题)

大家好 我是寸铁 希望这篇题解对你有用&#xff0c;麻烦动动手指点个赞或关注&#xff0c;感谢您的关注 注意 像数组下标出现i-1的&#xff0c;在循环的时候从i1开始。 关于0x3f3f3f3f和Integer.MAX_VALUE 0x3f3f3f3f:1061109567 Integer.MAX_VALUE:2147483647 在选用Integ…

(四)k8s实战-服务发现

一、Service 1、配置文件 apiVersion: v1 kind: Service metadata:name: nginx-svclabels:app: nginx-svc spec:ports:- name: http # service 端口配置的名称protocol: TCP # 端口绑定的协议&#xff0c;支持 TCP、UDP、SCTP&#xff0c;默认为 TCPport: 80 # service 自己的…

win10电脑记事本在哪里?电脑记事本如何查看字数?

在日常工作中&#xff0c;我们会遇到许多需要记录的信息和事项&#xff0c;而使用电脑记事本工具可以帮助我们方便地保存、管理这些内容。无论是记录工作会议的要点、制定工作计划&#xff0c;还是记录灵感和创意&#xff0c;电脑记事本都是非常实用的工具。 那么win10电脑记事…

springboot服务注册到Eureka,端口总是默认8080,自己配置端口不生效

这段时间接手了一个公司的老项目&#xff0c;用的是SpringCloud&#xff0c;在我用的时候突然发现有一个服务&#xff0c;注册到Eureka后&#xff0c;界面显示的端口和实际Ribbon调用的实例端口是不一致的&#xff0c;后来我自己写了个端口获取了一下所有的实例信息&#xff0c…

卷积神经网络——中篇【深度学习】【PyTorch】【d2l】

文章目录 5、卷积神经网络5.5、经典卷积神经网络&#xff08;LeNet&#xff09;5.5.1、理论部分5.5.2、代码实现 5.6、深度卷积神经网络&#xff08;AlexNet&#xff09;5.6.1、理论部分5.6.2、代码实现 5.7、使用块的网络&#xff08;VGG&#xff09;5.7.1、理论部分5.7.2、代…

第59步 深度学习图像识别:误判病例分析(TensorFlow)

基于WIN10的64位系统演示 一、写在前面 本期内容对等于机器学习二分类系列的误判病例分析&#xff08;传送门&#xff09;。既然前面的数据可以这么分析&#xff0c;那么图形识别自然也可以。 本期以mobilenet_v2模型为例&#xff0c;因为它建模速度快。 同样&#xff0c;基…

基于LOF算法的异常值检测

目录 LOF算法简介Sklearn官网LOF算法应用实例1Sklearn官网LOF算法应用实例2基于LOF算法鸢尾花数据集异常值检测读取数据构造数据可视化&#xff0c;画出可疑异常点LOF算法 LOF算法简介 LOF异常检测算法是一种基于密度的异常检测算法&#xff0c;基于密度的异常检测算法主要思想…

ubuntu安装pyenv

Pyenv是一种轻量级的Python版本管理工具&#xff0c;它可以让你在同一台机器上同时管理多个Python版本。这个工具对于开发者来说非常有用&#xff0c;因为在不同的项目中可能需要使用不同版本的Python。下面是在Ubuntu系统上安装pyenv&#xff0c;并配置环境变量的步骤&#xf…

Java之初始化顺序实践

功能概述 在创建Java对象时&#xff0c;需要将对象中的成员变量进行初始化后&#xff0c;才能调用对象的构造方法创建对象。本文中将会讲解初始化时父类与子类对应的顺序。 功能实践 场景1&#xff1a;父类、子类的初始化顺序 用例代码 Test public void test_init_order(…

在 CentOS 7 / RHEL 7 上安装 OpenSSL 1.1.x

OpenSSL 是一个开源软件库&#xff0c;由用于实现传输层安全 (TLS) 和安全套接字层 (SSL) 协议以及其他加密功能&#xff08;例如签名、加密、解密和验证&#xff09;的工具和库组成。操作系统和许多应用程序使用 OpenSSL 通过互联网提供安全通信。 CentOS 7 / RHEL 7 操作系统…

windows下Mysql安装配置教程

Mysql下载 在官网下载mysql community Server https://dev.mysql.com/downloads/mysql/ 可以选择下载压缩包或者MSI安装程序 使用压缩包安装 MySQL 压缩包安装通常需要以下步骤&#xff1a; 1. 下载 MySQL 安装包 你可以从 MySQL 官网上下载适合你系统的 MySQL 安装包&am…

nvm安装electron开发与编译环境

electron总是安装失败&#xff0c;下面说一下配置办法 下载软件 nvm npmmirror 镜像站 安装nvm 首先最好卸载node&#xff0c;不卸载的话&#xff0c;安装nvm会提示是否由其接管&#xff0c;保险起见还是卸载 下载win中的安装包 配置加速节点nvm node_mirror https://npmmi…

Linux学习之DNS服务的原理

DNS服务一些理论 域名系统&#xff08;Domain Name System&#xff0c;DNS&#xff09;是互联网的核心应用服务&#xff0c;可以通过IP地址查询到域名&#xff0c;也可以通过域名查询到IP地址。 FQDN&#xff08;Full Qualified Domain Name&#xff09;是完全限定域名&#xf…

c#写的端口监听,程序退出后,再次运行提示端口占用,且进程不存在

我用c#写了一个监听29999端口,进程结束后再次启动发现端口被占用&#xff0c;但是运行netstat -ano | findstr 29999找到进程ID后&#xff0c;却没有这个进程 经查询这个监听29999进程虽然没了&#xff0c;但是要找到他的父进程&#xff0c;把父进程关闭了才可以&#xff0c;参…

使用Tampermonkey(篡改猴)向页面注入js脚本

一、Tampermonkey 简单介绍 Tampermonkey是一款浏览器插件&#xff0c;适用于Chrome、Microsoft Edge、Safari、Opera Next 和 Firefox。他允许我们自定义javascript给指定网页添加功能&#xff0c;或修改现有功能。也可以用来辅助调试&#xff0c;或去除网页广告等。 官网地…

Rust 基础语法学习

Rust 基础语法学习 文章目录 Rust 基础语法学习hello world变量数据类型整数类型进制表示方法浮点数类型布尔类型字符类型字符串复合类型元组结构体元组结构体 切片类型字符串切片数组切片 不可变变量与可变变量常量注释函数语句与表达式 流程控制语句if else条件判断while循环…

【ES6】—【新特性】—Symbol详情

一、一种新的原始数据类型 定义&#xff1a;独一无二的字符串 二、 声明方式 1. 无描述声明 let s1 Symbol() let s2 Symbol() console.log(s1, s2) // Symbol() Symbol() console.log(s1 s2) // falsePS: Symbol 声明的值是独一无二的 2. 有描述的声明 let s1 Symb…

sql顺序倒序查询

要根据 orderNum 字段的顺序查询&#xff0c;你可以使用 SQL 的 ORDER BY 子句。默认情况下&#xff0c;ORDER BY 是按升序排序的&#xff0c;但你可以使用 DESC 关键字来指定降序排序。 以下是一个示例查询&#xff0c;按照 orderNum 字段的顺序将结果返回&#xff1a; SELEC…

java八股文面试[java基础]——异常

自定义异常&#xff1a; 异常Exception 是指程序运行时&#xff0c; 由于输入错误、网络、程序逻辑等原因导致运行时出现的问题。出现异常时&#xff0c;程序会暂时中断执行&#xff0c;并根据产生异常的原因&#xff0c;创建对应异常类型的异常对象&#xff0c;并抛出给JVM捕…