1、Android中Paint字体属性的设置: java
在Android SDK中使用Typeface类来定义字体,能够经过经常使用字体类型名称进行设置,如设置默认黑体: canvas
Paint mp = new paint();
mp.setTypeface(Typeface.DEFAULT_BOLD)
经常使用的字体类型名称还有:
测试
* Typeface.DEFAULT //常规字体类型 字体
* Typeface.DEFAULT_BOLD //黑体字体类型 spa
* Typeface.MONOSPACE //等宽字体类型 code
* Typeface.SANS_SERIF //sans serif字体类型 对象
* Typeface.SERIF //serif字体类型 图片
除了字体类型设置以外,还能够为字体类型设置字体风格,如设置粗体:
Paint mp = new Paint();
Typeface font = Typeface.create(Typeface.SANS_SERIF, Typeface.BOLD);
p.setTypeface( font );
经常使用的字体风格名称还有: ci
* Typeface.BOLD //粗体 字符串
* Typeface.BOLD_ITALIC //粗斜体
* Typeface.ITALIC //斜体
* Typeface.NORMAL //常规
可是有时上面那些设置在绘图过程当中是不起做用的,因此还有以下设置方式:
Paint mp = new Paint(); mp.setFakeBoldText(true); //true为粗体,false为非粗体 mp.setTextSkewX(-0.5f); //float类型参数,负数表示右斜,整数左斜 mp.setUnderlineText(true); //true为下划线,false为非下划线 mp.setStrikeThruText(true); //true为删除线,false为非删除线Paint经常使用的方法还有:
mp.setTextSize(); //设置字体大小,int型,如12 mp.setStrokeWidth(w); //设置线宽,float型,如2.5f,默认绘文本无需设置(默认值好像为0),但假如设置了,再绘制文本的时候必定要恢复到0说明:对于中文粗体的设置,好像只能经过setFakeBoldText(true)来实现,尽管效果看起来不是很实在(字体中空效果)。实际发现,最后绘制的效果与手机硬件也有些关系,好比前面的绘图测试程序,在HTC里面黑体中文一行压根没显示(英文和数字是正常的),而斜体一行倒显示了,只是没有斜体效果。魅族M9表现的很给力,多是M9定制的Android系统里面字体库比较丰富吧!
public void onDraw(Canvas canvas) { super.onDraw(canvas); Paint p = new Paint(); String familyName = “宋体”; Typeface font = Typeface.create(familyName,Typeface.BOLD); p.setColor(Color.RED); p.setTypeface(font); p.setTextSize(22); canvas.drawText(mstrTitle,0,100,p); }2、Android获取字体高度和设置行高
public int getFontHeight(float fontSize) { Paint paint = new Paint(); paint.setTextSize(fontSize); FontMetrics fm = paint.getFontMetrics(); return (int) Math.ceil(fm.descent - fm.top) + 2; }我的更倾向于如下方式获取字体实际高度:
Math.ceil(fm.descent - fm.ascent);
经过实际的截图对文字高度的肯定,后者更准确一些。
有了字体高度信息,就能够添加行与行之间的空隙,调整行高。
paint.setTextSize(fFontWidth); FontMetrics fm = paint.getFontMetrics(); fFontHeight = (float)Math.ceil(fm.descent - fm.ascent); if(fFontHeight > fLineHeight) { fMulValue = fLineHeight / fFontHeight; fAddValue = -1; } else { fMulValue = 1; fAddValue = fLineHeight - fFontHeight; } textViewLeft.setTextSize(fFontWidth); textViewLeft.setLineSpacing(fAddValue, fMulValue);
实践验证这种方式对多种分辨率的屏幕的适应性较强。
3、使用自定义字体
Typeface.createFromAsset(getContext().getAssets(),"fonts/samplefont.ttf"); paint.setFlags(Paint.ANTI_ALIAS_FLAG) //消除锯齿 paint.measureText(String s) //取得字符串宽度
Canvas 做为绘制文本时,使用FontMetrics对象,计算位置的坐标。
它的思路和java.awt.FontMetrics的基本相同。
FontMetrics对象
它以四个基本坐标为基准,分别为:
?FontMetrics.top
?FontMetrics.ascent
?FontMetrics.descent
?FontMetrics.bottom
该图片将以下