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
該圖片將以下