更改窗口小部件中的textview字体?

时间:2013-05-05 18:46:11

标签: java android fonts widget

有没有办法更改窗口小部件中的字体?我在这里看到了一些问题/答案,但有些人说它无法完成。其他人说它可以做到但不提供太多信息。我说的是我放在资源文件夹中的自定义字体。我想要使​​用的字体是设计指南中的Roboto。

我主要想问一下,因为其他问题表明这是不可能的。我的Nexus 7上有Google Currents小部件,它在小部件上使用Roboto字体,所以肯定有可能吗?

我想改变的TextView很好,只是一个textview。目前它没有格式/样式。我唯一需要的是将字体改为Roboto light。

我很感激有关如何做到这一点的一些建议。谢谢。

我实际上计划开源我在这里制作的小部件,这样它也可以帮助其他人。

2 个答案:

答案 0 :(得分:9)

  

有没有办法更改小部件中的字体?

是的,但不幸的是你只能使用系统字体。你可以在Android 4.1+上原生使用Roboto字体,但是:

android:fontFamily="sans-serif"           // roboto regular
android:fontFamily="sans-serif-light"     // roboto light
android:fontFamily="sans-serif-condensed" // roboto condensed

在Text的早期版本中使用Roboto的唯一方法是创建一个Bitmap并在Canvas上绘制Text,如下所示:

    Bitmap myBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
    Canvas myCanvas = new Canvas(myBitmap);
    Paint paint = new Paint();
    Typeface font = Typeface.createFromAsset(context.getAssets(), "fonts/myFont.ttf");

    paint.setTypeface(font);
    paint.setStyle(Paint.Style.FILL);
    paint.setColor(...);
    paint.setTextSize(...);
    myCanvas.drawText("Hello World", x, y, paint);

然后将其设置为RemoteView

rViews.setImageViewBitmap(R.id.myImageView, myBitmap);

答案 1 :(得分:-1)

首先在您的资源文件夹中创建一个子文件夹(字体)。 将您的字体(yourfont.ttf)添加到子文件夹。 然后使用以下代码:

Typeface type = Typeface.createFromAsset(getAssets(),"fonts/yourfont.ttf"); 
widgetyour.setTypeface(type);