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

news2024/11/24 10:54:42

一、预期效果

        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 {
    // 初始化界面
    @Override
    protected 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">
    <TextView
        android:id="@+id/tft_tv_demo_1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textColor="@color/app_black"
        android:textSize="24sp" />

    <TextView
        android: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.coloradmin.cn/o/939731.html

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

相关文章

成都瀚网科技:抖店平台销量怎么更新?

抖店平台是一个以直播电商为核心的平台。对于店主来说&#xff0c;销售情况更新是衡量经营效益和产品受欢迎程度的重要指标之一。本文将探讨抖店平台销售额的更新方式和影响&#xff0c;帮助店主更好地了解销售额更新机制和影响因素。 1.如何更新抖店平台销量&#xff1f; 自动…

数据增强:提高机器学习性能的有效技巧

文章目录 数据增强的原理常用的数据增强技术图像数据增强文本数据增强音频数据增强 数据增强的代码示例拓展应用与挑战结论 &#x1f389;欢迎来到AIGC人工智能专栏~数据增强&#xff1a;提高机器学习性能的有效技巧 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&#x1f379;✨博客主页&a…

树状表格子节点移动 - 在Vue.js中实现上下移动子节点的表格功能

目录 功能介绍 示例 代码 视图部分 逻辑部分 完整代码 功能介绍 本文介绍了如何在Vue.js框架下实现一个树状表格&#xff0c;其中支持选择子节点行的上下移动。通过这个功能&#xff0c;用户可以方便地改变子节点的顺序。代码示例和详细的实现步骤将展示如何使用Vue.js的相…

OJ题库:俩个有序序列(数组)合并

前言&#xff1a;在部分大厂笔试时经常会使用OJ题目&#xff0c;这里对《有序序列合并》进行思路分析和讲解&#xff0c;在这里主要使用俩种方法进行讲解&#xff0c;希望对各位读者有所帮助。 题目来自牛客网&#xff0c;欢迎各位积极挑战&#xff1a;有序序列合并_牛客题霸_牛…

汽车电子笔记之:基于AUTOSAR的多核监控机制

目录 1、概述 2、系统监控的目标 2.1、任务的状态机 2.2、任务服务函数 2.3、任务周期性事件 2.4、时间监控的指标 2.5、时间监控的原理 2.6、CPU负载率监控原理 2.6.1、设计思路 2.6.2、监控方法的评价 3、基于WDGM模块热舞时序监控方法 3.1、活跃监督 3.2、截至时…

Mongodb启动失败相关问题解决最全

一、mongod突然启动失败&#xff0c;存在mongod.lock文件 查找文件 find / -name mongod.lock -d删除该文件 rm -rf mongod.lock重新启动 /data/mongodb/bin/mongod --config /data/mongodb/bin/mongodb.conf --replSet cloud通过修改的方式启动 /data/mongodb/bin/mongod --r…

与信创国产化高度适配的低代码开发框架

信创产业是中国经济发展的基础&#xff0c;也是重要驱动力。坚持基础软件自主创新&#xff0c;是国产软件正版化应用和推广的源头。行业预测&#xff0c;2023年信创产业市场规模预计为18710.59亿元&#xff0c;预计到2025年将会接近3.5万亿元。 信创产业的主要目标是实现信息技…

屏蔽百度右侧热搜和首页新闻

先看效果 这样就没有垃圾新闻影响我们的注意力了 设置其实很简单&#xff0c;首先需要安装一下 Adblock Plus&#xff0c;安装的方式很多&#xff0c;这里我使用一个网站直接添加即可&#xff1a; Download Adblock Plus 3.18.1 CRX File for Chrome - Crx4Chrome 然后就能在…

Django(8)-静态资源引用CSS和图片

除了服务端生成的 HTML 以外&#xff0c;网络应用通常需要一些额外的文件——比如图片&#xff0c;脚本和样式表——来帮助渲染网络页面。在 Django 中&#xff0c;我们把这些文件统称为“静态文件”。 我们使用static文件来存放静态资源&#xff0c;django会在每个 INSTALLED…

【已解决】pycharm突然双击无法打开,重启电脑也不管用

1.问题&#xff1a; pycharm突然双击无法打开&#xff0c;重启电脑也不管用 2.解决 2.1 方法一&#xff08;修改Roaming&#xff09; 1.找到C盘对应路径下的pycharm版本 2. 用记事本打开文件类型为VMOPTIONS文件 3. 修改或删除最后一行的映射路径 4.保存退出 2.2 方法二…

无涯教程-Python机器学习 - Analysis of Silhouette Score函数

剪影得分的范围是[-1,1]。其分析如下- 1分数-接近1 剪影分数表示样本距离其邻近簇很远。 0分数-0 剪影分数表示样本在将两个相邻聚类分隔开的决策边界上或非常接近。 -1分数-1 剪影分数表示样本已分配给错误的聚类。 Silhouette得分的计算可以使用以下公式完成 $$剪影得…

FAB厂逃离指南—转行IC之经验分享!

一、为什么转行&#xff1f; 毕业后&#xff0c;我在成都一家国企做面板半导体工艺&#xff0c;说是工艺但是去了得先学习了解进口的设备半年左右&#xff0c;还得上夜班。&#xff08;这里给各位一个小小的建议&#xff1a;如果毕业找FAB厂类工作要慎重&#xff0c;非纯研发岗…

《机器学习在车险定价中的应用》实验报告

目录 一、实验题目 机器学习在车险定价中的应用 二、实验设置 1. 操作系统&#xff1a; 2. IDE&#xff1a; 3. python&#xff1a; 4. 库&#xff1a; 三、实验内容 实验前的猜想&#xff1a; 四、实验结果 1. 数据预处理及数据划分 独热编码处理结果&#xff08;以…

【QT】ComboBox的使用(14)

ComboBox这个控件我常用于多文本的储存、调用&#xff0c;正如他的中文意思为&#xff1a;下拉列表框。 下拉列表框&#xff1a;字面意思就是一个多文本的列表框&#xff0c;今天来看下如何使用ComboBox这个控件。 一.环境配置 1.python 3.7.8 可直接进入官网下载安装&…

恒运资本:“鹰派”讲话吓坏市场?美股大跳水后反弹!

鲍威尔表示&#xff0c;“如果适宜&#xff0c;美联储准备继续加息”。 北京时间8月25日晚间&#xff0c;美联储主席鲍威尔在杰克逊霍尔全球央行年会上发表讲话。 鲍威尔在讲话过程中&#xff0c;警告通胀“依旧过高”&#xff0c;以及“如果适宜&#xff0c;美联储准备继续加…

会话跟踪技术 【CookieSession】

会话技术 1 会话跟踪技术的概述2 Cookie2.1 Cookie的基本使用2.1.1 概念2.1.2 Cookie的工作流程2.1.3 Cookie的基本使用2.1.3.1 发送Cookie2.1.3.2 获取Cookie 2.2 Cookie的原理分析2.3 Cookie的使用细节2.3.1 Cookie的存活时间2.3.2 Cookie存储中文 3 Session3.1 Session的基本…

多线程学习之生产者和消费者与阻塞队列的关系

生产者和消费者 概述&#xff1a; 生产者消费者问题&#xff0c;实际上主要是包含了两类线程&#xff1a; 生产者线程用于生产数据消费者线程用于消费数据 生产者和消费者之间通常会采用一个共享的数据区域&#xff0c;这样就可以将生产者和消费者进行解耦&#xff0c; 两…

1.MIMO信号检测

目录 最优信号检测算法 次最优信号检测算法 分层信号检测算法 线性信号检测算法 迫零线性信号检测算法 最小均方误差线性信号检测算法 非线性信号检测算法 在MIMO-OFDM系统中&#xff0c;信号检测算法可以通过将MIMO系统的信号检测算法应用于各个并行的子信道进行信号…

java八股文面试[JVM]——类初始化过程

回顾类加载过程&#xff1a; 知识来源&#xff1a; 【2023年面试】Class初始化过程是什么_哔哩哔哩_bilibili

哪种类型耳机不伤耳朵,对耳朵伤害最小的耳机类型

在骨传导耳机的普及浪潮下&#xff0c;人们越来越意识到长期使用传统耳机对耳道造成的伤害。许多朋友纷纷转向相对更加护听的骨传导耳机&#xff0c;但仍有一部分人对这项技术不太了解&#xff0c;甚至被误导认为骨传导耳机会对听力和大脑造成伤害。因此&#xff0c;我将给大家…