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

baseLine:一行文字的底线。

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

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

Leading: 字符行间距。

public class TestOnDraw extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);MyView v = new MyView(this);this.setContentView(v);}}class MyView extends View{public MyView(Context context) {super(context);}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);Paint p = new Paint();p.setColor(Color.WHITE);p.setTextSize(50);p.setAntiAlias(true);FontMetrics fm = p.getFontMetrics();System.out.println("top = "+ fm.top);System.out.println("ascent = "+ fm.ascent);System.out.println("descent = "+ fm.descent);System.out.println("bottom = "+ fm.bottom);System.out.println("leading = "+ fm.leading);        int textHeight = (int) (Math.ceil(fm.descent - fm.ascent) + 2);        System.out.println("textHeight = "  + textHeight);                float width =500;        float baseline = 100f;        float offsetAscent = baseline + fm.ascent;        float offsetDescent = baseline +fm.descent;        float offsetTop = baseline + fm.top;        float offsetBottom = baseline + fm.bottom;                canvas.drawText("中国 bp Android", 0, baseline, p);canvas.drawLine(0, baseline, width, baseline, p);//baselinecanvas.drawLine(0, offsetAscent, width, offsetAscent, p);//ascentcanvas.drawLine(0, offsetDescent, width, offsetDescent, p);//descentcanvas.drawLine(0, offsetTop, width, offsetTop, p);//topcanvas.drawLine(0, offsetBotton, width, offsetBottom, p);//bottom}}

运行效果:


[Android]Android字体高度的研究

这是程序的输出结果:


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

更多相关文章

  1. android 完美获取状态栏高度
  2. Android 字体相关内容
  3. Android动态设置控件高度
  4. android 获取实际view 宽度高度
  5. Android中动态设置布局高度一致
  6. 安卓添加全局字体tff
  7. Android字体设置
  8. android状态栏 高度

随机推荐

  1. Android NDK HelloJNI
  2. 修改AVD的存放位置
  3. Android 和H5之间的交互-基础篇
  4. Android 无线接口层RIL(Radio Layer Inter
  5. android连接mysql数据库
  6. Android系统移植(三)-按键字符表
  7. Android闪屏页动画不起作用的解决方法
  8. android -------- java.net.UnknownServi
  9. android 底片,浮雕,老照片效果
  10. Android的权限机制之—— “沙箱”机制sh