如图背景为黄色的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显示文字上下有空白相关推荐

  1. android TextView显示文字和图片

    为什么80%的码农都做不了架构师?>>>    在做web的时候jsp页面可以直接显示一段html代码,如: <html><head><title> ...

  2. android 显示图片和文字,android TextView显示文字和图片

    在做web的时候jsp页面可以直接显示一段html代码,如: TextView使用HTML 强调 斜体 " +" 超链接HTML入门学习HTML! 颜色1" +" ...

  3. android app 原生 小米手机 TextView 不显示文字

    长春子问:"在android 原生app 开发中,发现在小米手机运行, TextView 里的文字 不显示,一片空白.而在其他品牌手机上可以正常显示". 如图: 代码如下: < ...

  4. Android的TextView在显示文字的时候,如果有段中文有英文,有中文,有中文标点符号,你会发现,当要换行的时候遇到中文标点, 这一行就会空出很多空格出来...

    一.问题描述: Android的TextView在显示文字的时候,如果有段中文有英文,有中文,有中文标点符号,你会发现,当要换行的时候遇到中文标点, 这一行就会空出很多空格出来.原因是: 1) Tex ...

  5. 织梦后台html编辑器不显示,织梦后台文章内容编辑空白不显示文字解决办法

    织梦CMS在PHP5.4版本运行中会出现文字不显示空白等问题,一般这种情况都属于PHP版本过高,更换降低PHP版本到5.2可完美解决, 最近在网上看到很多人问织梦后台编辑文章内容时出现空白,不显示文字 ...

  6. android textview 显示一行,且超出自动截断,显示...

    1)设置文本是否包含顶部和底部的额外空白 在xml文件的TextView控件中加入如下属性: android:includeFontPadding="false" 2)有时直接引用 ...

  7. Andoid TextView显示富文本html内容及问题处理

    目录 富文本内容与效果 TextView + Html ImageGetter 处理图片(表情) TagHandler 处理html内容的节点 Html的转换过程 HtmlToSpannedConve ...

  8. TextView设置文字竖着排放

    TextView设置文字竖着排放:很简单,只要设置宽高大小自适应,每行最多显示长度为1即可! <TextViewandroid:layout_width="wrap_content&q ...

  9. android 浮动文字提示,怎么在Android中实现一个自由拖动并显示文字的悬浮框

    怎么在Android中实现一个自由拖动并显示文字的悬浮框 发布时间:2021-01-27 15:34:05 来源:亿速云 阅读:107 作者:Leah 今天就跟大家聊聊有关怎么在Android中实现一 ...

最新文章

  1. MySQL00-这都不知道还TM学啥MySQL
  2. 【swjtu】数据结构实验5_基于十字链表的稀疏矩阵转置
  3. 《Asp.Net 2.0 揭秘》读书笔记(十八)
  4. 以未来的计算机为题写一篇作文,请以“未来的交通工具”为题写一篇英语作文...
  5. Netty - 传输
  6. 【译】Privacy on the Blockchain
  7. php round函数输出不对_Python 四舍五入函数 Round
  8. python迭代器是什么百度百科,python迭代器的接口是什么?
  9. PAT乙级1037 在霍格沃茨找零钱
  10. order by 影响效率么_内存碎片对性能的潜在影响
  11. python中continue用法案例_记录今天学习python中for与while循环针对break和continue的用法...
  12. Java中数据类型转换大全(个人总结)
  13. WebSocket 协议 RFC 文档(全中文翻译)
  14. DeepFake技术--DeepFake克星来了,简单两步算法造假图像无处可逃
  15. matlab prn文件,PRN格式文件 如何打开PRN文件 PRN是什么格式的文件 用什么打开 - The X 在线工具...
  16. java毕业设计——基于java+Spring+SSH的CRM客户关系管理系统设计与实现(毕业论文+程序源码)——CRM客户关系管理系统
  17. 计算机安装系统后鼠标无法使用,电脑重装系统后鼠标键盘不能用怎么办,鼠标键盘不能用解决方法...
  18. c++_2: 类的定义
  19. 【PTA】【Python】【拼题A 2022 跨年挑战赛】投票
  20. easyUI filebox限定文件大小

热门文章

  1. NeoVim 安装及配置
  2. 内推 | 【唯品会-数据分析】成都 10-15K
  3. 荣耀畅玩5手机中的“经济适用机”
  4. 青龙常见问题整理,其他可用仓库以及通知设置
  5. android studio生产签名文件,Android Studio 生成 keystore 签名文件
  6. Vue学习笔记1---初识vue
  7. eclipse给mysql修改表数据_Eclipse中java向数据库中添加数据,更新数据,删除数据...
  8. LC.746 使用最小花费爬楼梯
  9. 通信软件开发与应用课程结业报告
  10. 【高等数学】多元函数积分的轮换性,轮换对称性,对称性的区别