[Android]Android字体高度的研究

android自定义View绘制的时候,会有很多情况下要与字体打交道,涉及到字体宽度、高度的时候要特别注意一下几个概念,见图:

baseLine:一行文字的底线。

Ascent: 字符顶部到baseLine的距离。

Descent: 字符底部到baseLine的距离。

Leading: 字符行间距。

Java代码  

  1. public class TestOnDraw extends Activity {
  2. @Override
  3. protected void onCreate(Bundle savedInstanceState) {
  4. // TODO Auto-generated method stub
  5. super.onCreate(savedInstanceState);
  6. MyView v = new MyView(this);
  7. this.setContentView(v);
  8. }
  9. }
  10. class MyView extends View
  11. {
  12. public MyView(Context context) {
  13. super(context);
  14. }
  15. @Override
  16. protected void onDraw(Canvas canvas) {
  17. super.onDraw(canvas);
  18. Paint p = new Paint();
  19. p.setColor(Color.WHITE);
  20. p.setTextSize(50);
  21. p.setAntiAlias(true);
  22. FontMetrics fm = p.getFontMetrics();
  23. System.out.println("top = "+ fm.top);
  24. System.out.println("ascent = "+ fm.ascent);
  25. System.out.println("descent = "+ fm.descent);
  26. System.out.println("bottom = "+ fm.bottom);
  27. System.out.println("leading = "+ fm.leading);
  28. int textHeight = (int) (Math.ceil(fm.descent - fm.ascent) + 2);
  29. System.out.println("textHeight = "  + textHeight);
  30. float width =500;
  31. float baseline = 100f;
  32. float offsetAscent = baseline + fm.ascent;
  33. float offsetDescent = baseline +fm.descent;
  34. float offsetTop = baseline + fm.top;
  35. float offsetBottom = baseline + fm.bottom;
  36. canvas.drawText("中国 bp Android", 0, baseline, p);
  37. canvas.drawLine(0, baseline, width, baseline, p);//baseline
  38. canvas.drawLine(0, offsetAscent, width, offsetAscent, p);//ascent
  39. canvas.drawLine(0, offsetDescent, width, offsetDescent, p);//descent
  40. canvas.drawLine(0, offsetTop, width, offsetTop, p);//top
  41. canvas.drawLine(0, offsetBotton, width, offsetBottom, p);//bottom
  42. }
  43. }

运行效果:

这是程序的输出结果:

得出结论: canvas drawText() 的startX是从左下角的baseline的底线开始绘画的,如果我们要得到字体的高度需要关注descent - ascent (ascent线在baseline上面,所以是负数)

时间: 2024-10-12 17:32:00

[Android]Android字体高度的研究的相关文章

【转】Android绘制View的过程研究——计算View的大小

Android绘制View的过程研究——计算View的大小 转自:http://liujianqiao398.blog.163.com/blog/static/1818272572012102321850385/ 2012-11-23 14:24:59|  分类: Android开发 |  标签:android  view  android开发  |举报|字号 订阅 下载LOFTER客户端 一.android绘制view的过程简单描述           简单描述可以解释为:计算大小(measu

【转】(转)【Android】Paint的效果研究

转自:http://wpf814533631.iteye.com/blog/1847661 (转)[Android]Paint的效果研究 博客分类: android 在Paint中有很多的属性可以设置,比如可以设置阴影,颜色过滤等等,这些会产生不同的奇妙效果,今天就对各种属性探索一下. 方法一: 1 //设置绘制的颜色,a代表透明度,r,g,b代表颜色值. 2 setARGB(int a,int r,int g,int b); 这个不多说了,还有两个类似的方法,将设置alpha和rgb分割开来了

Android瀑布流StaggeredGridView学习研究

关于Android瀑布流控件,已经在江湖上,流传已久,超过两年时间了.网上也有很多相关学习资源,可以拿来研究学习.github上,就有两个资源,可以供学习者膜拜. 1.https://github.com/maurycyw/StaggeredGridView    此链接有图片加载功能,但功能相对简单些. 2.https://github.com/etsy/AndroidStaggeredGrid  提供的瀑布流功能强大,可以自定义瀑布流列数. 本篇博客,就讲解etsy的源码为主了.首先看效果图

Android系统字体规范

我们在做Android移动APP设计的时候,字号的选择也是很让人头疼,转载一份有关Android系统字体规范,如果在做Android项目的用户应该看看,如果有任何建议欢迎在留言处与我们交流探讨. 主要从以下几点做了分析: 移动设计中与字号有关的基本概念 Android系统默认字体及字号 Android字体单位sp与px的换算 规范字号的意义 印刷业的规范字号的用法 Android规范字号的近似用法 如何向前端输出? 如何在photoshop里选择字号? 1. 移动设计中与字号有关的基本概念 px

android 设置字体颜色、EditText自动输入转换成大写字母的多种方式

在TextView上面设置某一个字的字体颜色为指定颜色时,可以通过java类SpannableString类和Html语言来实现. (一)SpannableString类方式 private void setText(TextView t){ String text = t.getText().toString().trim(); SpannableString span = new SpannableString(text); span.setSpan(new ForegroundColorS

Android 自定义字体 例子

1.选择你喜欢的字体,下载字体文件 字体参考:http://www.creativebloq.com/graphic-design-tips/best-free-fonts-for-designers-1233380 2.项目assets文件中新建font文件夹,将你的字体文件放在该文件夹中 3.项目代码 布局代码: [html] view plaincopy <?xml version="1.0" encoding="utf-8"?> <Line

关于Android的字体简述

一.字体分析 1.1.文件系统中字体的位置: /system/fonts/ 其中的ttf文件都是字库对于源码/frameworks/data/fonts/下的字体文件 DroidSans-Bold.ttf 粗体的无衬线字体(拉丁字母等) DroidSans.ttf 常规的无衬线字体(拉丁字母等) DroidSansFallback.ttf 常规的无衬线字体(中文字符等,一般换字库就是替换此文件) DroidSansMono.ttf 等宽的无衬线字体(拉丁字母等) DroidSerif-Bold.

关于android的字体大小

http://mobile.51cto.com/design-351567.htm 关于android的字体大小,布布扣,bubuko.com

android获得屏幕高度和宽度

android获得屏幕高度和宽度 android获取屏幕的高度和宽度用到WindowManager这个类,两种方法: 1.WindowManager wm = (WindowManager) getContext()                     .getSystemService(Context.WINDOW_SERVICE);      int width = wm.getDefaultDisplay().getWidth();      int height = wm.getDe