TextView显示文字上下有空白
如图背景为黄色的TextView中的字母到上下边都有一定距离
空白是什么
经过一番搜索发现
- 文字的绘制是以一个叫做基线(baseLine)的位置为准的,而不是以View的左上角为准
- 文字的位置是受到几个值影响的,涉及到Paint.FontMetrics这个静态内部类,几个变量代表的内容也不是坐标轴上点的位置,而是以baseLine为准在Y轴方向的距离
public static class FontMetrics {/*** The maximum distance above the baseline for the tallest glyph in* the font at a given text size.*/public float top;/*** The recommended distance above the baseline for singled spaced text.*/public float ascent;/*** The recommended distance below the baseline for singled spaced text.*/public float descent;/*** The maximum distance below the baseline for the lowest glyph in* the font at a given text size.*/public float bottom;/*** The recommended additional space to add between lines of text.*/public float leading;
}
我们自定义一个MyTextView验证:
public class MyTextView extends android.support.v7.widget.AppCompatTextView {public MyTextView(Context context) {super(context);}public MyTextView(Context context, AttributeSet attrs) {super(context, attrs);}public MyTextView(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);
}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);int baseLineY = getBaseline();int baseLineX = 0 ;Paint paint = getPaint();
//计算各线在位置Paint.FontMetrics fm = paint.getFontMetrics();float ascent = baseLineY + fm.ascent;float descent = baseLineY + fm.descent;float top = baseLineY + fm.top;float bottom = baseLineY + fm.bottom;
//画基线paint.setColor(Color.GREEN);canvas.drawLine(baseLineX, baseLineY, getMeasuredWidth(), baseLineY, paint);
//画toppaint.setColor(Color.RED);canvas.drawLine(baseLineX, top, getMeasuredWidth(), top, paint);
//画ascentpaint.setColor(Color.BLUE);canvas.drawLine(baseLineX, ascent, getMeasuredWidth(), ascent, paint);
//画descentpaint.setColor(Color.BLUE);canvas.drawLine(baseLineX, descent, getMeasuredWidth(), descent, paint);
//画bottompaint.setColor(Color.RED);canvas.drawLine(baseLineX, bottom, getMeasuredWidth(), bottom, paint);}
}
布局文件
<?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:orientation="horizontal"android:gravity="center">
<com.ax.myapplication.MyTextView
android:layout_width="match_parent"android:layout_height="wrap_content"android:background="#ffff00"android:text="Ping"android:textColor="#000000"android:textSize="120dp"/>
</LinearLayout>
运行效果如下
两条红线中间的黄色区域为自定义控件,字母到上下两条红线之间的距离就是平时看到的空白
为什么
在发现这个问题都时候我在想在实现TextView时为什么上下要留空白
答:为了适应不同文字在不同设备上的显示
解决办法
通过在xml布局文件中设置android:includeFontPadding=”false”可以去掉ascent到top到间距以及descent到bottom到间距,效果如下(右图为添加了属性的)
不足:这个办法虽然减小了上下边距但是仍然不能完全去除边距
TextView显示文字上下有空白相关推荐
- android TextView显示文字和图片
为什么80%的码农都做不了架构师?>>> 在做web的时候jsp页面可以直接显示一段html代码,如: <html><head><title> ...
- android 显示图片和文字,android TextView显示文字和图片
在做web的时候jsp页面可以直接显示一段html代码,如: TextView使用HTML 强调 斜体 " +" 超链接HTML入门学习HTML! 颜色1" +" ...
- android app 原生 小米手机 TextView 不显示文字
长春子问:"在android 原生app 开发中,发现在小米手机运行, TextView 里的文字 不显示,一片空白.而在其他品牌手机上可以正常显示". 如图: 代码如下: < ...
- Android的TextView在显示文字的时候,如果有段中文有英文,有中文,有中文标点符号,你会发现,当要换行的时候遇到中文标点, 这一行就会空出很多空格出来...
一.问题描述: Android的TextView在显示文字的时候,如果有段中文有英文,有中文,有中文标点符号,你会发现,当要换行的时候遇到中文标点, 这一行就会空出很多空格出来.原因是: 1) Tex ...
- 织梦后台html编辑器不显示,织梦后台文章内容编辑空白不显示文字解决办法
织梦CMS在PHP5.4版本运行中会出现文字不显示空白等问题,一般这种情况都属于PHP版本过高,更换降低PHP版本到5.2可完美解决, 最近在网上看到很多人问织梦后台编辑文章内容时出现空白,不显示文字 ...
- android textview 显示一行,且超出自动截断,显示...
1)设置文本是否包含顶部和底部的额外空白 在xml文件的TextView控件中加入如下属性: android:includeFontPadding="false" 2)有时直接引用 ...
- Andoid TextView显示富文本html内容及问题处理
目录 富文本内容与效果 TextView + Html ImageGetter 处理图片(表情) TagHandler 处理html内容的节点 Html的转换过程 HtmlToSpannedConve ...
- TextView设置文字竖着排放
TextView设置文字竖着排放:很简单,只要设置宽高大小自适应,每行最多显示长度为1即可! <TextViewandroid:layout_width="wrap_content&q ...
- android 浮动文字提示,怎么在Android中实现一个自由拖动并显示文字的悬浮框
怎么在Android中实现一个自由拖动并显示文字的悬浮框 发布时间:2021-01-27 15:34:05 来源:亿速云 阅读:107 作者:Leah 今天就跟大家聊聊有关怎么在Android中实现一 ...
最新文章
- MySQL00-这都不知道还TM学啥MySQL
- 【swjtu】数据结构实验5_基于十字链表的稀疏矩阵转置
- 《Asp.Net 2.0 揭秘》读书笔记(十八)
- 以未来的计算机为题写一篇作文,请以“未来的交通工具”为题写一篇英语作文...
- Netty - 传输
- 【译】Privacy on the Blockchain
- php round函数输出不对_Python 四舍五入函数 Round
- python迭代器是什么百度百科,python迭代器的接口是什么?
- PAT乙级1037 在霍格沃茨找零钱
- order by 影响效率么_内存碎片对性能的潜在影响
- python中continue用法案例_记录今天学习python中for与while循环针对break和continue的用法...
- Java中数据类型转换大全(个人总结)
- WebSocket 协议 RFC 文档(全中文翻译)
- DeepFake技术--DeepFake克星来了,简单两步算法造假图像无处可逃
- matlab prn文件,PRN格式文件 如何打开PRN文件 PRN是什么格式的文件 用什么打开 - The X 在线工具...
- java毕业设计——基于java+Spring+SSH的CRM客户关系管理系统设计与实现(毕业论文+程序源码)——CRM客户关系管理系统
- 计算机安装系统后鼠标无法使用,电脑重装系统后鼠标键盘不能用怎么办,鼠标键盘不能用解决方法...
- c++_2: 类的定义
- 【PTA】【Python】【拼题A 2022 跨年挑战赛】投票
- easyUI filebox限定文件大小
热门文章
- NeoVim 安装及配置
- 内推 | 【唯品会-数据分析】成都 10-15K
- 荣耀畅玩5手机中的“经济适用机”
- 青龙常见问题整理,其他可用仓库以及通知设置
- android studio生产签名文件,Android Studio 生成 keystore 签名文件
- Vue学习笔记1---初识vue
- eclipse给mysql修改表数据_Eclipse中java向数据库中添加数据,更新数据,删除数据...
- LC.746 使用最小花费爬楼梯
- 通信软件开发与应用课程结业报告
- 【高等数学】多元函数积分的轮换性,轮换对称性,对称性的区别