初心

何期自性,本自具足

自定义widget上的字体类型

| Comments

对于Activity中的TextView之类的现实文字的控件,如果我们要使用自定义的字体,不能在XML里定义,只能在代码中实现。

一般的做法是将字体文件保存在assets/fonts/目录下,然后使用代码

1
2
3
TextView textView = (TextView) findViewById(R.id.textview);
Typeface typeFace = Typeface.createFromAsset(getAssets(),"fonts/Cambira.ttf");
textView.setTypeface(typeFace);

而widget使用RemoteView更新界面,无法使用这种方法设置自定义字体。

可以使用以下方法

参见 http://stackoverflow.com/questions/4318572/how-to-use-a-custom-typeface-in-a-widget

即使用ImageView代替TextView,自己绘制自定义字体的图片。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public Bitmap buildUpdate(String time) 
{
    Bitmap myBitmap = Bitmap.createBitmap(160, 84, Bitmap.Config.ARGB_4444);
    Canvas myCanvas = new Canvas(myBitmap);
    Paint paint = new Paint();
    Typeface clock = Typeface.createFromAsset(this.getAssets(),"Clockopia.ttf");
    paint.setAntiAlias(true);
    paint.setSubpixelText(true);
    paint.setTypeface(clock);
    paint.setStyle(Paint.Style.FILL);
    paint.setColor(Color.WHITE);
    paint.setTextSize(65);
    paint.setTextAlign(Align.CENTER);
    myCanvas.drawText(time, 80, 60, paint);
    return myBitmap;
}
1
2
3
String time = (String) DateFormat.format(mTimeFormat, mCalendar);
RemoteViews views = new RemoteViews(getPackageName(), R.layout.main);
views.setImageViewBitmap(R.id.TimeView, buildUpdate(time));

Comments