Android TextView 展示特殊字符高度变高问题解决

news2024/11/24 14:12:41

背景

#在我们的项目中,展示文字是很常见的需求,但是在线上展示中发现,有些信息是特殊字符展示的,而且这些字符的高度会导致TextView的高度变高(与正常字符比)。

效果如下:
在这里插入图片描述

很明显,带特殊字符的高度,会非常高!

解决方案

结论

该问题是因为Google在API28 之后对TextView做了优化,增加了mUseFallbackLineSpacing属性,该属性会在出现高度过高的字符时,自动扩充高度,来讲对应的字符展示完整。

方案

textView.apply {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
        isFallbackLineSpacing = false
    }
}

解决后展示效果
在这里插入图片描述

问题探查过程

1、确定问题原因

因为只有包含特殊字符的地方高度不一样,所以怀疑是该特殊字符的高度变化导致。在TextView通过获取TextView的Layout的,遍历获取每一行的高度,发现果然是包含了特殊字符的高度比不包含的高。

针对这个问题想到的解决方案是:自己绘制,自己制作Layout,根据位置将被拔高的文字绘制回中央。

2、在onDraw中使用StaticLayout自行绘制。

StaticLayout创建后,遍历每一行,并将内容绘制出来,问题出现了,我自己创建的StaticLayout遍历绘制后,并没有出现字体被拔高的情况。于是推测,会不会是系统创建的Layout有哪些属性是加入了该功能?

3、查阅源代码

找到TextView中创建StaticLayout的地方,将其构造中的内容copy出来,自己设置,结果发现,当我将 isUseFallbackLineSpacing 参数设置为true时,我绘制的结果和系统绘制出来的一样,是被拔高了的。于是将其设置为fasle,发现高度被压缩回正常字体大小了。

4、 确定方案

有了上面的认知,就继续查看TextView有没有提供设置对应属性的方法,结果发现了 setFallbackLineSpacing方法,在API 28 也就是 P 及以上,将其设置为false 即可。在官方的注释中,如果你的App支持 缅甸语或者藏语,需要将它必须设置为true。这里可以根据字符判断内容有没有缅甸语或者藏语,去设置吧。目前我们的App不支持该两种语言,直接设置为false,没什么太大影响。

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

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

相关文章

森云+优控配置摄像头进行录像和拍照测试

森云和优控配置摄像头进行录像和拍照测试 现在其实已经基本上明确自己的环境了,就是在ubuntu下的pycharm和vscode,然后下载conda(但是不要默认的base环境,只要conda create -n xxx 这样的基本功能就好了) 显示opencv…

AI绘画StableDiffusion:云端在线版使用笔记分享(Kaggle版)

玩AI绘画(SD),自己电脑配置不够?今天给大家介绍一下如何baipiao在线版AI绘画StableDiffusion。 Kaggle 是世界上最大的数据科学社区,拥有强大的工具和资源,可帮助您实现数据科学目标。(每周可以…

【MySQL学习笔记】(六)MySQL基本查询

表的增删查改 1 create1.1 单行数据全列插入1.2 多行数据 指定列插入1.3 插入否则更新1.4 替换 2 retrieve2.1 select列2.1.1 全列查询2.2.2 指定列查询2.2.3 查询字段为表达式2.2.4 为查询结果指定别名2.2.5 结果去重 2.2 where 条件2.2.1 null的查询 2.3 结果排序2.4 筛选分…

如何搭建一个实时对话转录应用(类似zoom中的文本转录功能)并部署到 Heroku

文章目录 应用搭建Assembly AI文件夹结构前端搭建HTMLindex.js 后端搭建server.jspackage.json Heroku 部署创建账号创建Heroku应用上传仓库 应用搭建 应用基于 html javascript使用的第三方 API 是 Assembly AI 提供的 Assembly AI 要使用 real-time transcript 功能&…

ChatGPT:为教育创新提供五大机遇

随着智能技术的不断发展,ChatGPT在教育场景中的创新价值可能比我们能够意识到的还要多。比如它可以自动处理作业、在线答疑,可以辅助语言学习、实时沟通,甚至还可以用于评估诊断、科学研究。国内外关于利用ChatGPT实现教育创新的场景描绘已经…

【Matplotlib】多级雷达图绘制

一、实例1:个人能力画像雷达图 # -*- coding: utf-8 -*- """ Created on Sat Jul 1 20:52:54 2023author: zcq """import numpy as np import matplotlib.pyplot as plt import matplotlibmatplotlib.rcParams[font.family]SimHei …

灯夹三角架

2个卡箍1个无头螺丝拼1个灯夹 还需要1个三脚架固定 difference(){union(){translate([18,-7,0])cube([14,14,1]);translate([-7,18,40])cube([14,14,1]);translate([-7,-32,40])cube([14,14,1]);points [[7,-32,40], //0[18,-7,0], //1[18,7,0], //2[7,-18,40], //3[7,…

【C++面向对象】足球比赛数据统计系统(面向对象练习)

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化 👉荣__誉👈:阿里云博客专家博主、51CTO技术博主 &#x…

【IoT】硬件产品经理:从入门到精通(卫朋)

目录 介绍 出版过程 CSDN学院 下单方式 个人介绍 介绍 2023 年已经过去了一半。 作为阶段小目标,这本书也如期发布了。 先来看看封面,这里也要感谢编辑们的辛苦付出。 ​ 出版过程 出版本身其实是一件比较严肃的事情。 过去的一年多时间&#…

进程的基本概念解读

目录 什么是进程 PCB OS中用于管理控制的数据结构 进程控制块PCB的作用 进程控制块中的信息 前趋图 背景 作用 表示 示例 程序的顺序执行 程序顺序执行的特征 程序的并发执行 程序的并发执行的特征 例题解读 进程的三种基本状态 进程的三种状态之间的转换 进…

linux下RabbitMQ的使用

文章目录 linux下RabbitMQ的使用首先docker启动网页打开网址:用户名和密码登录创建exchanges:创建Queues增加Queues的Bind linux下RabbitMQ的使用 首先docker启动 su rootsudo docker run -d --hostname rabbitsvr --name rabbit -p 5672:5672 -p 15672:15672 -p …

Uniform的理解

Uniform:一种从Cpu的应用,向Gpu中的着色器发送数据的方式,它是全局的,可以被任意着色器程序在任意阶段访问。 若声明了一个Uniform却没用过,编译器会默认移除这个变量,导致编译出的版本并不包含它&#xff…

配置本地的application-dev.yml读取nacos上面的配置

我想配置本地的application-dev.yml读取nacos上面的配置,我应该在配置文件里怎么写?并且在nacos里怎么建立 在本地的application-dev.yml文件中,您可以使用Spring Cloud Nacos来读取Nacos上的配置。以下是在配置文件和Nacos中设置的步骤&…

servlet+JSP与SpringBoot+Vue项目交互——servlet访问Vue页面

问题 servletJSP与SpringBootVue项目交互——servlet访问Vue页面 详细问题 笔者前一段时间开发一个项目,使用的技术框架是servletJSP,现阶段开发的项目技术框架为SpringBootVue,笔者现在需要输入servletJSP的路由地址(登录页面…

3DTiles Next研究

3DTiles Next是Cesium发布的下一代3DTiles规范。 元数据 在这一代规范中,更重视元数据(metadata,如建筑物ID或者类型等),通过这些元数据可以对3dtiles进行样式调整或者过滤显示。 关于详细的元数据规范介绍看这里。 …

Spark SQL生产优化经验--任务参数配置模版

大表扫描 特殊case说明:当任务存在扫event_log表时需注意,若对event_log表进行了过滤,且过滤比很高,如下图的case,input为74T,但shuffle write仅为3.5G,那么建议提高单partition的读取数据量&a…

Redis数据库高可用之RDB和AOF持久化

Redis数据库高可用、RDB和AOF持久化、性能管理 一、Redis 高可用二、Redis 持久化Ⅰ、持久化的功能Ⅱ、两种持久化方式Ⅲ、RDB 和 AOF 的区别 三、RDB 持久化Ⅰ、触发条件Ⅱ、执行流程 四、AOF持久化Ⅰ、开启AOFⅡ、执行流程 五、RDB 和 AOF 的优缺点Ⅰ、RDB 持久化Ⅱ、AOF 持久…

金鹰优化算法,附MATLAB代码,直接复制

金鹰优化算法(golden eagle optimizer, GEO)是于2020年提出的新型智能优化算法,该算法建立于金鹰个体 捕食过程中的巡航和攻击行为之上,通过平衡两者关系,帮助函数寻找最优值,已经在许多方面得到了应用。 关…

Google 将为高端 Chromebook 推出独立品牌

说起 Chromebook,一般大家的第一印象就是价格便宜、配置不高、做工普通,所选的材料也都是以塑料为主,产品主打的市场也是学生和教育群体。在不少人看来,Chromebook 就是一个配备了功能齐全的浏览器,外加一定的文件管理…

GOLANG进阶:Viper,Mysql,Swagger

GOLANG从浅入深必须学习的一些工具包 1.Viper: Viper 是一个完整的 Go 应用程序配置解决方案,优势就在于开发项目中你不必去操心配置文件的格式而是让你腾出手来专注于项目的开发。其特性如下: 支持 JSON/TOML/YAML/HCL/envfile/Java proper…